换行字节数据

时间:2015-12-16 16:43:38

标签: objective-c

我需要根据模式将字符串包装成一个字节序列:

  1. 第一个字节应为0x02
  2. 第二个字节和第三个字节应该是以字节为单位的字符串长度
  3. 然后字符串序列应该来
  4. 下一个字节应为0x03
  5. 最后一个字节应该是字符串
  6. 的字节序列的逻辑XOR

    这就是我试图做的事情:

    - (NSData *)sendMessage:(NSData *)message {
        Byte stx = 0x02;
        Byte etx = 0x03;
        Byte length = [message length];
    
        // Computes bitwise XOR of message bytes
        const char *bytes = [message bytes];
        Byte crc = bytes[0];
        for (int i = 1; i < [message length]; i++)
            crc = crc ^ bytes[i];
    
        NSString *packet = [NSString stringWithFormat:@"%x%x%s%x%x", stx, (uint16_t)length, bytes, etx, crc];
        return [packet dataUsingEncoding:NSUTF8Encoding];
    }
    

    我需要将此字节序列写入CBCharacteristic,然后由BT设备读取,检查格式,如果正确,则显示字符串。无论如何,它一直拒绝它。有人可以解释一下我在哪里失败了吗?

1 个答案:

答案 0 :(得分:2)

问题是使用stringWithFormat来构建数据。该字符串及其产生的UTF-8编码根本不是您所需要的。

使用NSMutableData添加字节:

NSMutableData *result = [[NSMutableData alloc] init];
[result appendBytes:&stx length:1];
uint16_t len = (uint16_t)length;
[result appendBytes:&len length:2]; // might have a byte ordering issue here
[result appendData:message];
[result appendBytes:&crc length:1];