尝试将NSString
编码为NSString
时,我遇到了以下问题 - > NSData
- > NSInputStream
然后使用NSInputStream
方法从read
解码:
NSString *inputString = [NSString stringWithFormat:@"%c", 255];
NSData *data = [inputString dataUsingEncoding:NSUTF8StringEncoding];
NSInputStream *stream = [NSInputStream inputStreamWithData:data];
[stream open];
uint8_t bytes;
[stream read:&bytes maxLength:1];
NSLog(@"%i", bytes);
输出为195
而非255
。为什么呢?
答案 0 :(得分:1)
由于您用于字符串的编码类型。 UTF-8是一种字符串编码形式,最终将大于127的字符转换为多字节序列。因此,虽然inputString
包含单个字符,但您的数据对象实际上并不包含您可能假设的单个字节,而是多个(在本例中为两个)字节。当你从流中读取时,你只读取编码数据的第一个字节,但那里还有更多。
您无需通过输入流运行数据即可查看此结果。访问NSData
实例的第一个字节会显示相同的内容。
你说这是一个“问题”,但你没有提出你想要实现的目标。 255不是可打印/有意义的文本字符。如果要传输原始数据字节,可以直接执行,而不是使用NSString和字符串编码。如果你正在传输字符串,那么它已经做了正确的事情。您只需要准备好您的数据大小可以超过字符串“长度”。