2012-11-23 160 views
4

标题几乎可以说明一切。如何在NSLog中打印unsigned char *()

想打印(不是以十进制),而是以无符号字符值(十六进制)。 示例

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

任何想法?提前致谢。

+0

使用printf和'for'循环:http://stackoverflow.com/questions/6357031/how-do-you-convert-buffer-byte-array-to-hex-string-in-c –

+0

我猜你必须做'@“%02X%@ 02X%@ 02X ...”,(unsigned int)data [0],(unsigned int)data [1],...' –

回答

2

char数组没有格式说明符。一种选择是从阵列创建一个NSData对象,然后记录NSData对象。在标准库

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

好吧,有一个char数组的格式说明符 - 's' - 但它期望一个以null结尾的字符串并以ASCII字符打印,而不是十六进制。 –

+0

@HotLicks这就是为什么我没有提到'%s'因为我们没有处理一个空终止的'char'数组,并且所需的输出与'%s'提供的输出大不相同。 – rmaddy

+0

主题不正确,但如何打印无符号字符?不是一个数组。 – HelmiB

0

什么都不会做,所以你可以写一个小的十六进制转储功能,或者你可以用别的东西,打印非ambigious完整的数据。例如:

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

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

+0

VIS_WHITE未申报。包含什么? – HelmiB

+0

#include 有关详细信息,请参阅strvisx的手册页。 – Stripes

1

要打印的NSLog的char *请尝试以下操作:

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

您需要null终止您的字符串。

从苹果文档:

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

返回由从UTF8编码字节的给定的C阵列复制字符初始化一个NSString对象。