串口發送數據——字符串發送與十六進制發送的區別


轉自:http://blog.csdn.net/wityy/article/details/8234739
  串口發送數據——字符串發送與十六進制發送的區別
       
        在使用串口發送數據時可以選擇字符串發送或者十六進制發送,通常情況下我們習慣選用字符串發送數據。關於兩者的區別,需要從計算機存儲數據的格式說起。

        在計算機中,數據是以二進制的形式存儲的,例如十進制 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

 

 

          仔細對照接收結果就很容易明白字符串發送和十六進制發送的區別了。

 

附轉換:

  1. //轉換每一個字符為正真的16進制數值  
  2.     char Widget::ConvertHexChar(char ch)    
  3.     {    
  4.         if((ch >= '0') && (ch <= '9'))    
  5.             return ch-0x30;    
  6.         else if((ch >= 'A') && (ch <= 'F'))    
  7.             return ch-'A'+10;    
  8.         else if((ch >= 'a') && (ch <= 'f'))    
  9.             return ch-'a'+10;    
  10.         else return (-1);    
  11.     }    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM