C语言--十六进制数组转换为字符串、十六进制字符数组串口发送

 首先,我们会遇到这么多种的“十六进制的表达字符串”:


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’了。

你可能感兴趣的:(C,ESP8266,嵌入式C语言)