gpt4 book ai didi

ios - 通过 NSData 将 NSString 编码为 NSInputStream 后字节发生变化

转载 作者:行者123 更新时间:2023-11-29 11:53:31 26 4
gpt4 key购买 nike

尝试将 NSString 编码为 NSString -> NSData -> NSInputStream 时遇到以下问题然后使用 read 方法从 NSInputStream 解码:

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。为什么?

最佳答案

因为您对字符串使用的编码类型。 UTF-8 是一种字符串编码形式,它最终会将值大于 127 的字符转换为多字节序列。因此,尽管 inputString 包含单个字符,但您的数据对象实际上并不像您假设的那样包含单个字节,而是包含多个(在本例中为两个)字节。当您从流中读取时,您只读取了编码数据的第一个字节,但那里还有更多内容。

您无需通过输入流运行数据即可看到此结果。访问 NSData 实例的第一个字节会显示相同的内容。

您说这是一个“问题”,但您没有说明您要实际完成什么。 255 不是可打印/有意义的文本字符。如果你想传输原始数据字节,你可以直接这样做,而不是使用 NSString 和字符串编码。如果您正在传输字符串,那么它已经在做正确的事情。您只需要做好准备,您的数据大小可能会超过您的字符串“长度”。

关于ios - 通过 NSData 将 NSString 编码为 NSInputStream 后字节发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40098777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com