首先,我们会遇到这么多种的“十六进制的表达字符串”:
char *str1 = "FF FF 12 FE EE 00 2F 09 3D 22 00 FF";
char *str2 = "FFFF12FEEE002F093D2200FF";
char *str3 = "0xFF 0xFF 0x12 0xFE 0xEE 0x00 0x2F 0x09 0x3D 0x22 0x00 0xFF";
char str4[] = {0x12,0x00,0xFF,0xFF,0x01,0x00,0x0C,0x01,0x0F,0x3C};
问题一:
我有一个模块,它只发送16进制数据,和只接受16进制数据。
1、我接受到它发过来的数据是这样的子的:
"FF FF 12 00 01 00 11 05 00 00 00 00 00 A4 45 21"
2、然后我尝试用串口发送:
失败一:
char *str = "FF FF 12 FE EE 00 2F 09 3D 22 00 FF";
printf(str); // 串口打印
失败二:
char *str = "FF FF 12 FE EE 00 2F 09 3D 22 00 FF";
int i = 0;
for(;i < strlen(str); i++)
{
printf("%02X", str[i]); // 串口打印
}
3、分析
8421 8421
|||| ||||
0101 1001
hex 5 9 ----> 0x59
dec 89 ----> 89
char 'Y' ----> 'Y'
假设,我收到一个16进制数 0x59
我的串口会怎么做呢?
---> str[0] = '5'
1个字节的 0x59 串口会把它们处理成两个字符,分别存放在两个数组元素里面,即2个字节
---> str[1] = '9'
如果我还想把它发送出去,就像这样:
char *str = '59';
printf(str);
那么我发送出去的就是字符’5’和’9’了。