串口收發數據時字符、十六進制、二進制格式詳細區分

          在使用串口調試助手時發送和接收數據都是以字節 (Byte) 爲單位,並且可以選擇字符、十六進制、二進制三種收發格式 ,那麼這三種格式究竟怎樣區分呢?  

       首先我們來明確一個概念 :串口收發數據的單位 '' 字節 (Byte) '' ,   1Byte = 8 bits , 串口收發數據格式一般爲  1bit起始位(一般爲0) + 8bits 數據位(一字節) +1bit校驗位(可有可無) +1bit結束位(一般爲1)


        下面逐一區分三種收發格式:


           (1) 十六進制:   由於1位十六進制數位寬爲 4bits ,那麼 2 位十六進制數佔有一個字節的位寬,所以當以16進制格式收發時,每個字節發送或者接收2位十六進制數, 舉個例子 ,當以16進制格式發送一組數據 '' 0F3C781A '' 時   , 每個字節對應的數據如下:

發送數據 0x0F 0x3C 0x78 0x1A
字節數   1   2   3   4
  

          注意: 類似 ''0xFF'' 是表示兩位十六進制數的標準寫法,''0x'' 在實際應用串口調製助手中時直接省略。


          (2) 二進制  :  參照十六進制收發格式的原理 ,每位二進制數位寬爲 1bit ,那麼串口每個字節可以傳輸 8 位二進制數,同樣,在傳輸數據 '' 0F3C781A '' 時  ,每個字節對應的數據即爲上表中十六進制數對應的二進制數。

發送數據 0000_1111 0011_1100 0111_1000 0001_1010
字節數          1           2          3          4
          (3) 字符: 串口在以字符格式收發數據時 ,因爲每個字符在 ASCII 碼錶中對應成二進制碼 都是8bit 寬的二進制數 ,正好爲一個字節,所以默認先將該字符轉換爲對應的二進制數然後發送,相當於每個字節發送一個字符。串口接收端如果是二進制格式,那麼將直接顯示;如果爲十六進制,即顯示該字符在ASCII碼錶中對應的2位十六進制數 ;如果串口接收端以字符格式顯示的話即將接收到的二進制數按照 ASCII 碼錶再轉換爲對應的字符 (該字符與發送的字符相同) 然後顯示。

          同樣,以字符的格式發送數據 '' 0F3C781A '' 時 ,首先按照ASCII碼錶 (網址:http://www.asciima.com/) 找到每個字符對應的二進制和十六進制數如下表:


字符 0 F 3 C 7 8 1 A
對應的16進制數 0x30 0x46 0x33 0x43 0x37 0x38 0x31 0x41
對應的2進制數 0011_0000 0100_0110 0011_0011 0100_0011 0011_0111 0011_1000 0011_0001 0100_0001
           那麼以字符格式發送該段數據後,分別以字符格式、16進制、二進制格式接收到的數據爲:

接收字節數 1 2 3 4 5 6 7 8
接收字符 0 F 3 C 7 8 1 A
接收16進制數 0x30 0x46 0x33 0x43 0x37 0x38 0x31 0x41
接收二進制數 0011_0000 0100_0110 0011_0011 0100_0011 0011_0111 0011_1000 0011_0001 0100_0001

          講到這,想必讀者對於串口收發數據的三種格式的區別已經清晰明瞭了吧。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章