1. 程式人生 > >C語言--十六進位制陣列轉換為字串、十六進位制字元陣列串列埠傳送

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