转换NSData
to NSString
does not停在空字节处。 ANSString
可以包含任意 Unicode 字符,包括嵌入的“NULL”字符。
Example:
char bytes[] = { 'H', 'e', 'l', 'l', 'o', 0, 'W', 'o', 'r', 'l', 'd', 0 };
NSData *data = [NSData dataWithBytes:bytes length:sizeof(bytes)];
NSString *str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"%@", str);
Output:
Hello
So it looks就好像字符串只包含 5 个字符,并且转换在第一个空字节处停止。但这仅是NSLog
输出,实际上什么都没有丢失:
for (int i = 0; i < [str length]; i++) {
unichar c = [str characterAtIndex:i];
NSLog(@"%2d, %3d, %c", i, c, c);
}
Output:
0, 72, H
1, 101, e
2, 108, l
3, 108, l
4, 111, o
5, 0,
6, 87, W
7, 111, o
8, 114, r
9, 108, l
10, 100, d
11, 0,
因此该字符串包含所有数据并且不会丢失任何内容。当您将其发送到服务器时,该字符串可能会被截断。
REMARK:将加密数据转换为字符串对我来说似乎有问题,因为数据以某种字符编码进行解释。我已经选择NSASCIIStringEncoding
在此示例中,但根据文档,此编码仅对 ASCII 值 0…127 有效。
如果您添加有关如何以及以何种格式将加密数据发送到服务器的更多信息,我们也许能够提出如何更好地解决此问题的建议。