欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2634|回復: 7
收起左側

求問一個類型轉換問題

[復制鏈接]
ID:100982 發表于 2022-8-15 16:15 | 顯示全部樓層 |閱讀模式
  1. /* 將一段內存數據轉換為十六進制格式的字符串,
  2. str-字符串指針, src-源數據地址, len-數據長度 */
  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) //轉換為 0-9 或 A-F
  10. *str++ = tmp + '0';
  11. else
  12. *str++ = tmp - 10 + 'A';
  13. tmp = *src & 0x0F; //再取低 4 位
  14. if (tmp <= 9) //轉換為 0-9 或 A-F
  15. *str++ = tmp + '0';
  16. else
  17. *str++ = tmp - 10 + 'A';
  18. *str++ = ' '; //轉換完一個字節添加一個空格
  19. src++;
  20. }
  21. }
復制代碼
這是書上的一段代碼,目的是為了類型轉換為ascii后給1602用,現在比較疑惑的是,轉ascii,為什么要分高四位和低四位啊?
回復

使用道具 舉報

ID:624769 發表于 2022-8-15 19:57 來自觸屏版 | 顯示全部樓層
你要搞明白,hex和ASCII的差別,就沒這問題了。你要搞不明白兩者差別,說再多,你也無法理解。
回復

使用道具 舉報

ID:213173 發表于 2022-8-15 20:54 | 顯示全部樓層
假設一個數為165,二進制1010 0101,十六進制0XA5,先取高四位轉換為"A",再取低四位轉換為"5"。"A"的字符碼0X41,"5"的字符碼0X35。
無標題.jpg

回復

使用道具 舉報

ID:883242 發表于 2022-8-16 01:30 | 顯示全部樓層
因為一個unsigned char的范圍是0x00~0xff,不分高低四位表達不了。
回復

使用道具 舉報

5#
無效樓層,該帖已經被刪除
ID:100982 發表于 2022-8-16 08:27 | 顯示全部樓層
wulin 發表于 2022-8-15 20:54
假設一個數為165,二進制1010 0101,十六進制0XA5,先取高四位轉換為"A",再取低四位轉換為"5"。"A"的字符 ...

感謝,大致明白了
回復

使用道具 舉報

ID:100982 發表于 2022-8-16 08:27 | 顯示全部樓層
Hephaestus 發表于 2022-8-16 01:30
因為一個unsigned char的范圍是0x00~0xff,不分高低四位表達不了。

意思是0到f,正好是用4位表達嗎?
回復

使用道具 舉報

ID:161164 發表于 2022-8-16 09:55 | 顯示全部樓層
本帖最后由 lkc8210 于 2022-8-16 16:17 編輯

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

你的函數可以簡化為:

  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++ = ' '; //轉換完一個字節添加一個空格
  9.                 src++;
  10.         }
  11. }
復制代碼
回復

使用道具 舉報

ID:123289 發表于 2022-8-17 09:43 | 顯示全部樓層
本是不必分的。
巧了,對于數字0-9,分出高低字節,變換時方便。
沙發說的是要害。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表