Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从rs232导入的字符串中包含Null_Ios_Objective C - Fatal编程技术网

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

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

我有一个从rs232设备附加到文本视图的sting。所有内容都会导入,但有一些字符串会被关联,就好像有一个空值附加到导入的某些数据的结束和开始。知道如何在字符串中查找空值吗

- (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提供。