来源:公众号【鱼鹰谈单片机】
作者:鱼鹰Osprey
ID :emOsprey
前段时间移植了 tinyUSB 开源库,使 STM32F013C8T6 成功模拟了 7 个串口 独立的 CDC 设备(参考了知乎上一篇文章,不过那个实现还有一些问题,并且不能单独设置每个串口的波特率)。
后面又移植了 lwip ,成功实现了虚拟网络适配器:
于是准备看看源码实现,突然发现一条看不懂的代码:
_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 和字符串显示):
并且虽然"0123456789ABCDEF" 写了两次,但内存中只有一份拷贝,因此并不会占用更多空间,并且因为使用索引形式,效率也是杠杠滴!
嗯,以后十六进制转化就用这个代码了。
审核编辑:汤梓红
-
C语言
+关注
关注
180文章
7597浏览量
136058 -
串口
+关注
关注
14文章
1542浏览量
76137 -
字符串
+关注
关注
1文章
576浏览量
20478 -
十六进制
+关注
关注
2文章
32浏览量
37686
原文标题:绝了,还能这么转化十六进制字符串-C语言骚操作
文章出处:【微信号:emOsprey,微信公众号:鱼鹰谈单片机】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论