找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2353|回复: 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,不分高低四位表达不了。
回复

使用道具 举报

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 单片机教程网

快速回复 返回顶部 返回列表