Ios 从rs232导入的字符串中包含Null
我有一个从rs232设备附加到文本视图的sting。所有内容都会导入,但有一些字符串会被关联,就好像有一个空值附加到导入的某些数据的结束和开始。知道如何在字符串中查找空值吗Ios 从rs232导入的字符串中包含Null,ios,objective-c,Ios,Objective C,我有一个从rs232设备附加到文本视图的sting。所有内容都会导入,但有一些字符串会被关联,就好像有一个空值附加到导入的某些数据的结束和开始。知道如何在字符串中查找空值吗 - (void)readBytesAvailable:(NSInteger)count { DataSource *sharedManager = [DataSource sharedManager]; const int bufferLength = 1024; uint8_t buffer[buf
- (void)readBytesAvailable:(NSInteger)count {
DataSource *sharedManager = [DataSource sharedManager];
const int bufferLength = 1024;
uint8_t buffer[bufferLength];
NSString *s;
NSInteger bytesRead = [session read:buffer bufferLength:bufferLength];
if (bytesRead > 0) {
// Convert to a string - note that the remote device is sending only well- formed UTF8 text data (e.g. no binary data, no VT100 excampe codes, etc).
s = [[NSString alloc] initWithBytes:buffer length:bytesRead encoding: NSUTF8StringEncoding];
AllDataTextView.text = [AllDataTextView.text stringByAppendingString:s];
您解析字符串的方式是错误的 如果以1024字节为单位读取字节,则可以轻松地只读取某些字符的一部分(UTF8字符的长度可以为1、2、3甚至更多字节)。然后,当试图解析这样一个块时,您将得到
nil
(null
),因为您的缓冲区将不包含有效数据(部分字符无效,这将导致解析失败)
理想的解决方案是先读取所有字节,然后将它们转换为文本。另一种解决方案是检测部分字符(参见UTF8规范),只解析完整的字符,并将部分字符保留在缓冲区中,直到下一次迭代
请看你能给我举个例子,说明如何读取所有字节,然后将其转换为字符串吗。感谢您提供的信息,但我对此不是很了解,因为我发布的一些代码来自我用来通过wifi下载数据的sdk。谢谢你advance@Wilbe我不确定这是否是您的选项,这取决于会话的工作方式。我查看了会话类的工作方式,但它似乎是从SDK的一部分库中提取的。我会联系SDK的开发人员,也许他们可以解释一下这个问题。解决了这个问题:数据是ASCII格式的,而不是utf-8,缓冲区长度由发送到方法的count提供。