从rs232导入的字符串中包含Null

时间:2016-05-12 16:14:03

标签: ios objective-c

我有一个sting附加到rs232设备的文本视图。所有东西都会导入,但是有一些字符串会被连接起来,好像有一个空值附加到导入的某些数据的结尾和开头。如何在字符串中查找空值?

- (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];

1 个答案:

答案 0 :(得分:0)

解析字符串的方式是错误的。

如果以1024字节的块读取字节,则可以轻松读取某些字符的一部分(UTF8字符的长度可以是1,2,3或甚至更多字节)。然后,当尝试解析这样的块时,您将获得nilnull),因为您的buffer将不包含有效数据(部分字符无效并且将使解析失败)

理想的解决方案是首先读取所有字节,然后将它们转换为文本。另一种解决方案是检测部分字符(参见UTF8规范)并仅解析整个字符并将部分字符保留在缓冲区中直到下一次迭代。

请参阅Decoding partial UTF-8 into NSString