標題: 求問一個類型轉(zhuǎn)換問題 [打印本頁]

作者: wifen    時間: 2022-8-15 16:15
標題: 求問一個類型轉(zhuǎn)換問題
  1. /* 將一段內(nèi)存數(shù)據(jù)轉(zhuǎn)換為十六進制格式的字符串,
  2. str-字符串指針, src-源數(shù)據(jù)地址, len-數(shù)據(jù)長度 */
  3. void MemToStr(unsigned char *str, unsigned char *src, unsigned char len)
  4. {
  5. unsigned char tmp;
  6. while (len--)
  7. {
  8. tmp = *src >> 4; //先取高 4 位
  9. if (tmp <= 9) //轉(zhuǎn)換為 0-9 或 A-F
  10. *str++ = tmp + '0';
  11. else
  12. *str++ = tmp - 10 + 'A';
  13. tmp = *src & 0x0F; //再取低 4 位
  14. if (tmp <= 9) //轉(zhuǎn)換為 0-9 或 A-F
  15. *str++ = tmp + '0';
  16. else
  17. *str++ = tmp - 10 + 'A';
  18. *str++ = ' '; //轉(zhuǎn)換完一個字節(jié)添加一個空格
  19. src++;
  20. }
  21. }
復制代碼
這是書上的一段代碼,目的是為了類型轉(zhuǎn)換為ascii后給1602用,現(xiàn)在比較疑惑的是,轉(zhuǎn)ascii,為什么要分高四位和低四位?

作者: 188610329    時間: 2022-8-15 19:57
你要搞明白,hex和ASCII的差別,就沒這問題了。你要搞不明白兩者差別,說再多,你也無法理解。
作者: wulin    時間: 2022-8-15 20:54
假設一個數(shù)為165,二進制1010 0101,十六進制0XA5,先取高四位轉(zhuǎn)換為"A",再取低四位轉(zhuǎn)換為"5"。"A"的字符碼0X41,"5"的字符碼0X35。



作者: Hephaestus    時間: 2022-8-16 01:30
因為一個unsigned char的范圍是0x00~0xff,不分高低四位表達不了。
作者: wifen    時間: 2022-8-16 08:27
wulin 發(fā)表于 2022-8-15 20:54
假設一個數(shù)為165,二進制1010 0101,十六進制0XA5,先取高四位轉(zhuǎn)換為"A",再取低四位轉(zhuǎn)換為"5"。"A"的字符 ...

感謝,大致明白了
作者: wifen    時間: 2022-8-16 08:27
Hephaestus 發(fā)表于 2022-8-16 01:30
因為一個unsigned char的范圍是0x00~0xff,不分高低四位表達不了。

意思是0到f,正好是用4位表達嗎?
作者: lkc8210    時間: 2022-8-16 09:55
本帖最后由 lkc8210 于 2022-8-16 16:17 編輯

用十進制的個十百千來比喻會不會比較好理解?
十進制的一位為0~9
十六進制的一位為0~F,由4個位元組成
所以顯示一位十六進制,就要分離出4個位元

你的函數(shù)可以簡化為:

  1. void MemToStr(unsigned char *str, unsigned char *src, unsigned char len)
  2. {
  3.         unsigned char code ASCII[] = {"0123456789ABCDEF"};
  4.         while (len--)
  5.         {
  6.                 *str++ = ASCII[*src >> 4];//先取高 4 位
  7.                 *str++ = ASCII[*src & 0x0F];//再取低 4 位
  8.                 *str++ = ' '; //轉(zhuǎn)換完一個字節(jié)添加一個空格
  9.                 src++;
  10.         }
  11. }
復制代碼

作者: yzwzfyz    時間: 2022-8-17 09:43
本是不必分的。
巧了,對于數(shù)字0-9,分出高低字節(jié),變換時方便。
沙發(fā)說的是要害。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1