2013-03-02 156 views
0

我的NSData这样的:如何将此NSData转换为NSString?

455a4f4e 00000001 01020304 00000000 00000000 

我的代码:

Byte bytes[] = {0x45, 0x5a, 0x4f, 0x4e, 0, 0, 0, 1, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0}; 
NSData *data = [NSData dataWithBytes:bytes length:sizeof(bytes)]; 
NSString *str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 
NSLog(@"%@", str); // prints "EZON" 

我希望得到的结果是EZON0001等等

为什么打印结果不包括后面的数字'EZON'?

回答

4

由于0x4e之后的零不是ASCII/UTF-8数字'0',而是字符串标记的结尾。它应该是为0x30,不为0x00 ...

+1

+1好的解释答案:) – 2013-03-02 03:33:20

+0

非常感谢你! – withshe 2013-03-02 03:46:29

+0

确保在字节数组的末尾为空终止符保留一个0。 – rmaddy 2013-03-02 03:47:06

0

试试这个

Byte bytes[] = {0x45, 0x5a, 0x4f, 0x4e, 0, 0, 0, 1, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0}; 
    NSData *data = [NSData dataWithBytes:bytes length:sizeof(bytes)]; 
    NSString* newStr = [NSString stringWithUTF8String:[data bytes]]; 
    NSLog(@"%@", newStr); 
+0

问题是提供了字符“0 0 0 1”等的错误字节。其余的代码很好。 – rmaddy 2013-03-02 03:40:54

+0

@ravindhiran:无需回答,当你看到有4个upvotes的答案时,除非你看到你可以给予更好。 – 2013-03-02 03:47:22

+0

感谢您的回复,但您的回答不正确。 – withshe 2013-03-02 03:47:58