看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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) -- 【微小說】我意外失明,女友不離不棄。後來,她遭遇車禍,臨終前把角膜捐給了我。 護士告訴我,女友離開的時候微笑著,讓我用她的眼睛代替她去好好看她眼中的世界。 我睜著剛複明的雙眼,淚如雨下。走上街頭,一切的一切都那麼熟悉,只是所有男人的 頭頂都多了一個字,要不是“攻”,要不是“受"。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.125.140.96 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1433900664.A.B3E.html
MOONRAKER: 通通normalize成0-15,然後隨便你愛加多少。 06/10 09:54
chrisos: 欸...不是很懂XD 可以稍微解釋一下嗎QQ 06/10 10:29
MOONRAKER: 不管你處理[0-9A-F]或[0-9a-f]都可以轉成0..15吧 06/10 10:32
chrisos: 轉成0~15是指原文中 value & 0x0f 的這種方式嗎? 06/10 10:42
EdisonX: 你可以用if else,結果正確就行。 06/10 12:26
Feis: 或者你喜歡讓人家看不懂: 06/10 13:18
Feis: 12336+(s>>4<<8)+s%16+(s>=160)*1792+(s%16>=10)*7 06/10 13:18
uranusjr: 至少也用 switch 吧, if-else 也太誇張 XD 06/10 13:28
看到有了說if-else所以我想起了另一種做法,我一開始太執著於一次就把事情完成 所以沒有想到分開做比較簡單這件事 Ascii[1] = (((value&0xf0)>>4)>=10)?((value&0xf0)>>4)+55:((value&0xf0)>>4)+0x30; Ascii[2] = ((value & 0x0f) >= 10) ? value & 0x0f) + 55 : (value & 0x0f) + 0x30; 如此就能把1BYTE HEX轉成 2BYTE Ascii並輸出 BTW要做這個主要是想把單晶片(PIC)抓到的值丟到LCD,讓人可以直接觀測。 如果有更簡短的方法歡迎提供,不然我還是覺得太長XDD ※ 編輯: chrisos (59.125.140.96), 06/10/2015 13:39:29
chrisos: 對了 value就是1Byte hex ASCII陣列是2 Byte ASCII 06/10 13:40
chrisos: 然後array裡面應該寫0、1比較好,沒注意到 06/10 13:41
MOONRAKER: 嗯我弄錯了 X( 06/10 14:13
firejox: Ascii[1] = "0123456789abcdef"[(value&0xf0)>>4] 06/11 18:24
chrisos: ?? 上面是? 06/12 09:42
uranusjr: 長短不是問題啊, 效率和可維護性才是 06/12 23:15
firejox: 用索引取值的方式 算是一個簡單好讀的方法 06/15 00:39