NSData到NSString返回Null

use*_*150 15 objective-c

我搜索过了.但仍然无法得到它.

我正在将NSdata转换为NSString.当我这样做[data description]; 时返回<00000000 31323334 35363738>是的,我收到我的字符串@"12345678".

如何将其正确转换为NSString?我试过了

NSString *b = [NSString stringWithUTF8String:[data bytes]];
NSString *a = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

两者都返回null.任何的想法?谢谢

大家好,感谢您的所有建议.它似乎是不变的,因此永远是一个空洞的角色.因此,每当我收到某些内容时,我只删除第一个<00000000>,然后它的工作正常

Nic*_*Nic 27

如果编码不正确,会发生这种情况.

尝试使用ASCII测试.ASCII几乎可以肯定地用于检索某些字符串.如果它只是数字,它可能会起作用.

NSString *a = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSASCIIStringEncoding];
Run Code Online (Sandbox Code Playgroud)

除UTF-8外,最常见的是:

NSASCIIStringEncoding
NSUnicodeStringEncoding
NSISOLatin1StringEncoding
NSISOLatin2StringEncoding
NSSymbolStringEncoding
Run Code Online (Sandbox Code Playgroud)

尝试一下,看看它们是否有效.


bbu*_*bum 6

我正在将NSdata转换为NSString.当我做[数据描述]; 它返回我<00000000 31323334 35363738>是的,我收到我的字符串@"12345678".

不 - 你没有收到那个字符串.您正在接收一个以一堆0x00值开头的字节序列,后跟一系列恰好对应于ASCII序列"12345678"的字节.

即你有原始数据,并试图将其转换为约束类型,但不能,因为约束类型不能代表原始数据.

您可以尝试在NSString上使用"有损转换"API,但这可能不起作用,无论如何都会很脆弱.

最好的选择?

仅将实际表示字符串的NSData中的字节转换为NSString的实例.这可以做到-initWithBytes:length:encoding:; 你需要进行计算才能找到正确的偏移量和长度.