0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何转化十六进制字符串

鱼鹰谈单片机 来源:鱼鹰谈单片机 2024-01-09 09:12 次阅读

来源:公众号【鱼鹰谈单片机

作者:鱼鹰Osprey

ID :emOsprey

前段时间移植了 tinyUSB 开源库,使 STM32F013C8T6 成功模拟了 7 个串口 独立的 CDC 设备(参考了知乎上一篇文章,不过那个实现还有一些问题,并且不能单独设置每个串口的波特率)。

后面又移植了 lwip ,成功实现了虚拟网络适配器:

15291fc4-ae8a-11ee-8b88-92fbcf53809c.png

于是准备看看源码实现,突然发现一条看不懂的代码:

_desc_str[1+chr_count++] = "0123456789ABCDEF"[(tud_network_mac_address[i] >> 4) & 0xf];

乍看一下,字符串不像字符串,数组也不像,直到看到说明,才大概明白,运行之后,颠覆三观了。。。

完整代码如下:

static uint16_t _desc_str[32 + 1];
unsigned int chr_count = 0;
uint8_t tud_network_mac_address[6] = {0x02,0x02,0x84,0x6A,0x96,0x00};
// Convert MAC address into UTF-16
for (unsigned i=0; i> 4) & 0xf];
    _desc_str[1+chr_count++] = "0123456789ABCDEF"[(tud_network_mac_address[i] >> 0) & 0xf];
}

功能就是将 mac 地址转化为 16 进制,并且还是 utf-16格式(16 bit 一个字符)

最终转化效果如下(16bit 和字符串显示):

153b64f4-ae8a-11ee-8b88-92fbcf53809c.png

并且虽然"0123456789ABCDEF" 写了两次,但内存中只有一份拷贝,因此并不会占用更多空间,并且因为使用索引形式,效率也是杠杠滴!

1544e13c-ae8a-11ee-8b88-92fbcf53809c.png

嗯,以后十六进制转化就用这个代码了。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136645
  • 串口
    +关注

    关注

    14

    文章

    1551

    浏览量

    76407
  • 字符串
    +关注

    关注

    1

    文章

    578

    浏览量

    20505
  • 十六进制
    +关注

    关注

    2

    文章

    32

    浏览量

    37730

原文标题:绝了,还能这么转化十六进制字符串-C语言骚操作

文章出处:【微信号:emOsprey,微信公众号:鱼鹰谈单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    labview中浮点数与十六进制字符串相互转化

    与下位机数据交流及通讯时,经常有浮点数与十六进制字符串相互转化的需求,经过两天总结,找到了最简洁的相互转化的方法,萌新欢迎大佬指正,文件也附上。*附件:HEX
    发表于 10-21 19:51

    十六进制字符串至数值转换的问题

    `通过串口发送和接收数据。接收到的十六进制数据想要变为十进制数据输出。但是用“十六进制字符串至数值转换”这个空间最后的显示结果是0。自认为是十六进
    发表于 04-09 10:47

    字符串十六进制

    字符串十六进制
    发表于 08-26 15:34

    字符串显示转换十六进制显示

    字符串显示转换十六进制显示。例如:字符串:A21D4700转换成十六进制:A21D 4700怎么做呀?
    发表于 04-22 16:50

    字符串进制十六进制

    下位机发送的报文都是十六进制的,如显示999发送过来的报文就是09 09 09、(把999拆成三个9)用上图的方法我已经把下位机的保温解析,但是现在我想反转手动输入十进制字符串转成十六进制
    发表于 05-26 13:19

    进制字符串十六进制字符串转换 拿来分享

    自己做的二进制字符串十六进制字符串转换拿来分享
    发表于 07-24 11:36

    十六进制字符串至数值或字符转换的问题

    本帖最后由 zhuimengren2034 于 2015-10-9 15:08 编辑 通过串口直接收到的十六进制数,想要通过程序自动显示为十进制数;字符串是0102FFFE(每四位表示一个
    发表于 10-09 15:03

    十六进制显示的字符串怎么进行加法运算

    十六进制显示的字符串怎么进行加法运算,我使用字符串至数值的转换显示转换结果为0,不知道怎么回事
    发表于 01-06 20:12

    Labview十进制数据转化十六进制字符串十六进制显示)

    希望走过路过的大神帮我解决一下这个问题! 问题描述:通过Labview向下位机发送数据为十六进制字符串,其中有一部分是数值转换成十六进制字符串,程序如下图所示图中的这两处
    发表于 05-16 10:53

    数据转换、SQL存储,十六进制字符串、正常字符串

    到了这个方法。方法:将所有乱码的 ,不乱码的数据显示成十六进制,如下图所示,把正常显示的字符串更换为16进制显示,当显示为16进制字符串时,
    发表于 05-27 10:29

    进制字符串十六进制字符串转换,十六进制字符串显示为ASCII码,拿来分享

    自己用labview做的二进制字符串十六进制字符串转换,十六进制字符串显示为ASCII码,拿来
    发表于 01-24 11:18

    字符串转为十六进制软件工具

    字符串转为十六进制软件工具
    发表于 06-30 09:51 453次下载

    stm32十六进制字符串转十进制数值代码

    stm32十六进制字符串转十进制数值代码CSDN不会用,文档写在语雀内转载请注明作者:DK127、Holinkity代码仅供参考,不允许用来赚CSDN币谢谢附上参考代码:https
    发表于 01-12 18:34 41次下载
    stm32<b class='flag-5'>十六进制</b><b class='flag-5'>字符串</b>转十<b class='flag-5'>进制</b>数值代码

    HTA:将十六进制数转换为ASCII字符串

    使用该指令,可以将在输入 IN 中指定的十六进制数转换为 ASCII 字符串。转换结果存储到参数 OUT 指定的地址中。
    的头像 发表于 06-19 11:55 2502次阅读

    HTA:将十六进制数转换为 ASCII 字符串

    说明 使用该指令,可以将在输入 IN 中指定的十六进制数转换为 ASCII 字符串。转换结果存储到参数 OUT 指定的地址中。 使用参数 N,可指定待转换十六进制字节的数量。由于 ASCII
    的头像 发表于 06-26 11:01 4024次阅读