我需要根据模式将字符串包装成一个字节序列:
0x02
0x03
这就是我试图做的事情:
- (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设备读取,检查格式,如果正确,则显示字符串。无论如何,它一直拒绝它。有人可以解释一下我在哪里失败了吗?
答案 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];