在計算機中,數據是以二進制的形式存儲的,例如十進制 1(10)在計算機中用 0000 0001(2)來表示。我們在用串口發送數據的時候首先將待數據轉換為對應的ASCII碼,然后再將這些ASCII碼按照二進制的方式一位一位的發送出去。
例如我們要發送一串數據“A852010100000000A91A”,以字符串和十六進制兩種方式發送:
(1)字符串發送
串口以字符串發送數據,首先將字符串轉化為二進制,格式如下:
0000 1010 0000 1000 0000 0110 0000 0010 0000 0000 0000 0001 0000 0000 0000 0001
A 8 5 2 0 1 0 1
0000 0000 0000 0000 0000 0000 0000 0000 0000 1010 0000 1001 0000 0001 0000 1010
0 0 0 0 A 9 1 A
然后按照8位(串口設置數據位為8位)形式將數據發送出去。
串口接收的數據格式如下:
| 編號 |
數據內容 |
編號 |
數據內容 |
| 0 |
A |
8 |
0 |
| 1 |
8 |
9 |
0 |
| 2 |
5 |
10 |
0 |
| 3 |
2 |
11 |
0 |
| 4 |
0 |
12 |
A |
| 5 |
1 |
13 |
9 |
| 6 |
0 |
14 |
1 |
| 7 |
1 |
15 |
A |
(2)十六進制發送數據
串口以十六進制發送數據,首先將數據轉化為:
1010 1000 0110 0010 0000 0001 0000 0001 0000 0000 0000 0000 1010 1001 0001 1010
0XA8 0X52 0X01 0X01 0X00 0X00 0XA9 0X1A
然后按照8位(串口設置數據位為8位)形式將數據發送出去。
串口接收的數據格式如下:
| 編號 |
數據內容 |
編號 |
數據內容 |
| 0 |
A8 |
4 |
00 |
| 1 |
52 |
5 |
00 |
| 2 |
01 |
6 |
A9 |
| 3 |
01 |
7 |
1A |
仔細對照接收結果就很容易明白字符串發送和十六進制發送的區別了。
附轉換:
- //轉換每一個字符為正真的16進制數值
- char Widget::ConvertHexChar(char ch)
- {
- if((ch >= '0') && (ch <= '9'))
- return ch-0x30;
- else if((ch >= 'A') && (ch <= 'F'))
- return ch-'A'+10;
- else if((ch >= 'a') && (ch <= 'f'))
- return ch-'a'+10;
- else return (-1);
- }
