Re: [問題] 1 Byte 轉 2 ASCII

作者: chrisos (克里斯)   2015-06-10 09:44:15
※ 引述《hccash (風雨飄搖)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: VS 2008
: 問題(Question):
: 請問板上各位大大
: 今天假設我有一BYTE數值為0x01
: 我如何轉換為兩個ASCII - 0x30 0x31
: 並且儲存成為WORD大小0x3031呢?
: 感謝!
借文問一下,那請問如果是0xA2的狀況呢?
原文中推文的解答是利用取值加上0x30的方式,但這方式只能對應到0~9
ascii表中A是由0x41開始 a是由0x61開始
如果我有一組亂數產生的HEX檔,我要怎麼做轉換會比較好?
ps:補充一下平台,使用在Microchip上,compiler為XC8,相容於C99規範(純C)
作者: MOONRAKER (㊣牛鶴鰻毛人)   2015-06-10 09:54:00
通通normalize成0-15,然後隨便你愛加多少。
作者: chrisos (克里斯)   2015-06-10 10:29:00
欸...不是很懂XD 可以稍微解釋一下嗎QQ
作者: MOONRAKER (㊣牛鶴鰻毛人)   2015-06-10 10:32:00
不管你處理[0-9A-F]或[0-9a-f]都可以轉成0..15吧
作者: chrisos (克里斯)   2015-06-10 10:42:00
轉成0~15是指原文中 value & 0x0f 的這種方式嗎?
作者: EdisonX (卡卡獸)   2015-06-10 12:26:00
你可以用if else,結果正確就行。
作者: Feis (永遠睡不著 @@)   2015-06-10 13:18:00
或者你喜歡讓人家看不懂:12336+(s>>4<<8)+s%16+(s>=160)*1792+(s%16>=10)*7
作者: uranusjr (←這人是超級笨蛋)   2015-06-10 13:28:00
至少也用 switch 吧, if-else 也太誇張 XD
作者: chrisos (克里斯)   2015-06-10 13:40:00
對了 value就是1Byte hex ASCII陣列是2 Byte ASCII然後array裡面應該寫0、1比較好,沒注意到
作者: MOONRAKER (㊣牛鶴鰻毛人)   2015-06-10 14:13:00
嗯我弄錯了 X(
作者: firejox (Tangent)   2015-06-11 18:24:00
Ascii[1] = "0123456789abcdef"[(value&0xf0)>>4]
作者: chrisos (克里斯)   2015-06-12 09:42:00
?? 上面是?
作者: uranusjr (←這人是超級笨蛋)   2015-06-12 23:15:00
長短不是問題啊, 效率和可維護性才是
作者: firejox (Tangent)   2015-06-15 00:39:00
用索引取值的方式 算是一個簡單好讀的方法

Links booklink

Contact Us: admin [ a t ] ucptt.com