→ 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