Re: [問題] 1 Byte 轉 2 ASCII

看板C_and_CPP作者 (克里斯)時間10年前 (2015/06/10 09:44), 10年前編輯推噓0(0015)
留言15則, 6人參與, 最新討論串2/2 (看更多)
※ 引述《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

06/10 09:54, , 1F
通通normalize成0-15,然後隨便你愛加多少。
06/10 09:54, 1F

06/10 10:29, , 2F
欸...不是很懂XD 可以稍微解釋一下嗎QQ
06/10 10:29, 2F

06/10 10:32, , 3F
不管你處理[0-9A-F]或[0-9a-f]都可以轉成0..15吧
06/10 10:32, 3F

06/10 10:42, , 4F
轉成0~15是指原文中 value & 0x0f 的這種方式嗎?
06/10 10:42, 4F

06/10 12:26, , 5F
你可以用if else,結果正確就行。
06/10 12:26, 5F

06/10 13:18, , 6F
或者你喜歡讓人家看不懂:
06/10 13:18, 6F

06/10 13:18, , 7F
12336+(s>>4<<8)+s%16+(s>=160)*1792+(s%16>=10)*7
06/10 13:18, 7F

06/10 13:28, , 8F
至少也用 switch 吧, if-else 也太誇張 XD
06/10 13:28, 8F
看到有了說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

06/10 13:40, , 9F
對了 value就是1Byte hex ASCII陣列是2 Byte ASCII
06/10 13:40, 9F

06/10 13:41, , 10F
然後array裡面應該寫0、1比較好,沒注意到
06/10 13:41, 10F

06/10 14:13, , 11F
嗯我弄錯了 X(
06/10 14:13, 11F

06/11 18:24, , 12F
Ascii[1] = "0123456789abcdef"[(value&0xf0)>>4]
06/11 18:24, 12F

06/12 09:42, , 13F
?? 上面是?
06/12 09:42, 13F

06/12 23:15, , 14F
長短不是問題啊, 效率和可維護性才是
06/12 23:15, 14F

06/15 00:39, , 15F
用索引取值的方式 算是一個簡單好讀的方法
06/15 00:39, 15F
文章代碼(AID): #1LTvPui- (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1LTvPui- (C_and_CPP)