6

标题几乎说明了一切。

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

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

任何的想法?提前致谢。

4

3 回答 3

4

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

NSData *dataData = [NSData dataWithBytes:data length:sizeof(data)];
NSLog(@"data = %@", dataData);
于 2012-11-23T04:15:22.673 回答
1

标准库中没有任何东西可以做到这一点,因此您可以编写一个小的十六进制转储函数,或者您可以使用其他打印无歧义的完整数据的东西。就像是:

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

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

于 2012-11-23T04:18:40.383 回答
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;

返回一个 NSString 对象,该对象通过从给定的 UTF8 编码字节 C 数组中复制字符来初始化。

于 2014-07-29T02:39:19.430 回答