我有一个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];
答案 0 :(得分:0)
解析字符串的方式是错误的。
如果以1024字节的块读取字节,则可以轻松读取某些字符的一部分(UTF8字符的长度可以是1,2,3或甚至更多字节)。然后,当尝试解析这样的块时,您将获得nil
(null
),因为您的buffer
将不包含有效数据(部分字符无效并且将使解析失败)
理想的解决方案是首先读取所有字节,然后将它们转换为文本。另一种解决方案是检测部分字符(参见UTF8规范)并仅解析整个字符并将部分字符保留在缓冲区中直到下一次迭代。