如何在NSLog()中打印unsigned char *

时间:2012-11-23 04:09:04

标签: objective-c c char unsigned nslog

标题几乎说了一切。

想要打印(不是十进制),而是使用unsigned char值(HEX)。 示例

unsigned char data[6] = {70,AF,80,1A, 01,7E};
NSLog(@"?",data); //need this output : 70 AF 80 1A 01 7E

有什么想法吗?提前谢谢。

3 个答案:

答案 0 :(得分:3)

char数组没有格式说明符。一种选择是从数组中创建NSData对象,然后记录NSData对象。

NSData *dataData = [NSData dataWithBytes:data length:sizeof(data)];
NSLog(@"data = %@", dataData);

答案 1 :(得分:1)

标准库中没有任何内容可以执行此操作,因此您可以编写一个小的十六进制转储函数,或者您可以使用其他打印非ambigious完整数据的内容。类似的东西:

char buf[1 + 3*dataLength];
strvisx(buf, data, dataLength, VIS_WHITE|VIS_HTTPSTYLE);
NSLog(@"data=%s", buf);

对于小块数据,您可以尝试制作NSData并使用debugDescription方法。这是一个十六进制转储,但没有任何承诺它永远是一个。

答案 2 :(得分:1)

要在NSLog中打印char *,请尝试以下操作:

char data[6] = {'H','E','L','L','0','\n'};
NSString *string = [[NSString alloc] initWithUTF8String:data];
NSLog(@"%@", string);

您需要null终止字符串。

来自Apple文档:

- (instancetype)initWithUTF8String:(const char *)nullTerminatedCString;

返回通过复制UTF8编码字节的给定C数组中的字符而初始化的NSString对象。