官术网_书友最值得收藏!

1.9 字符編碼

在設計英文或數字等字符(字符串)顯示程序或串口收發信息等程序時,必須熟悉標準的ASCII編碼表。ASCII編碼(0x00~0x7F)如表1-12所示。由表1-12可知:

? 數字字符'0'~'9'的ASCII編碼為0x30~0x39,與數字0~9的ASCII編碼差值為0x30。兩者在相互轉換時可相0x30或者直接或'0'。

? 英文字符'A'~'Z'、'a'~'z'的ASCII編碼為0x41~0x5A、0x61~0x7A。英文字符在大小寫轉換時可大0x20(因為0x61-0x41=0x20)。

? 字符串結束標識符'\0'的ASCII編碼為0x00,即NUL或NULL(非打印字符)。

? 常用的空格字符(SP/SPACE)的ASCII編碼為0x20。

? 在向串口發送字符串時,常以回車符/換行符(CR/LF)為結束標志,回車符/換行符的ASCII編碼分別為0x0D、0x0A。

? 表1-12中前兩行所列出的其他特殊控制字符(Control Characters)雖然多數已被廢止,但有部分控制字符名稱仍應用于某些現代產品設計。

表1-12 ASCII編碼(0x00~0x7F)

例如,某種射頻讀卡器(RFID)模塊所設計的鏈路層協議以STX、ETX(文本起始符/結束符)作為數據幀的起始標識符,不過該廠商將STX與ETX的編碼定義為0x82與0x83。另外,表1-12中的應答與非應答字符(ACK/NAK/NACK),其概念仍應用于全書所有有關I2C器件的程序設計,所不同的是I2C協議中的應答與非應答僅僅是一個脈沖位(0/1),而不再是一個字節編碼。

在實際應用過程中,如果臨時要查詢某些字符編碼,包括中文字符編碼,可先用記事本(NotePad)輸入字符內容,然后用超級編輯器(UltraEdit)打開,切換到十六進制模式查看字符編碼。

用NotePad與UltraEdit獲取字符編碼如圖1-15所示。從圖1-15中可以看到,用NotePad輸入的字符(包括中文字符)以及在UltraEdit中查看的十六進制字符編碼的效果。UltraEdit不僅顯示了所輸入英文數字等字符的ASCII編碼(小于0x80),而且顯示了所輸入漢字的內碼。例如,“8051單片機C語言程序設計”的編碼為“38 30 35 31 B5 A5 C6 AC BB FA43 D3 EF D1 D4 B3 CC D0 F2 C9 E8 BC C6”。在圖1-15的標底色編碼部分,除“38 30 35 31”與“43”為數字與英文半角字符“8、0、5、1、C”的編碼以外,其他編碼全部大于或等于0xA0,且每兩字節(漢字內碼)表示一個漢字。8051單片機雖然支持在源程序中直接使用中文字符串或中英文混合字符串,且偶爾會編譯正常通過,但實際運行時卻會出現異常的情況,此時可考慮將中文字符串以編碼(漢字內碼)的方式提供。

圖1-15 用NotePad與UltraEdit獲取字符編碼

主站蜘蛛池模板: 民和| 东乌珠穆沁旗| 南丰县| 会泽县| 衡山县| 开原市| 辽阳县| 鲁山县| 府谷县| 穆棱市| 安岳县| 沅江市| 钟祥市| 增城市| 永靖县| 同江市| 柳林县| 迭部县| 蛟河市| 兴海县| 邮箱| 济阳县| 通化县| 怀宁县| 漳州市| 竹北市| 怀远县| 武安市| 牙克石市| 沐川县| 吴忠市| 抚顺县| 莱阳市| 北京市| 通山县| 青岛市| 揭阳市| 陵水| 武穴市| 施甸县| 遂溪县|