如何转化十六进制字符串

来源:公众号【鱼鹰谈单片机】
作者:鱼鹰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-16for (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 写了两次,但内存中只有一份拷贝,因此并不会占用更多空间,并且因为使用索引形式,效率也是杠杠滴!
嗯,以后十六进制转化就用这个代码了。


WT2605立体声蓝牙芯片概述及功能特点
毫米波雷达元器件市场格局,产业链一览
国内上市的首款5G手机 华为Mate 20 X 5G版本月起全球开卖
石墨烯电池的优缺点
本田实现镁电池商业化 欲替代锂电池?
如何转化十六进制字符串
Cyntec高效uPOL模块MMN12AD01-SG特点
智能自助试衣设备诞生了,它就是智能体感试衣镜
将CMOS 放大器用于高性能
Vitis AI 1.4赋予 AI 产品化更多可能性
中国通用航空业现处在初创期,未来发展空间巨大
研华科技推出基于Arm® Cortex®-A35 NXP i.MX 8X应用处理器
我国工业互联网呈现蓬勃发展的态势
智慧城市道路积水监测系统
大联大世平集团推出基于onsemi产品的直流无刷电机(BLDC)驱动器方案
业界领先的半导体供应商兆易创新发布GD32E231系列超值型MCU新品
TÜV南德新能源汽车检测实验室 是纯电动及混动汽车安全性的代名词
Zcash需要什么才能变得更加主流
便携式短路接地线的技术要求与使用方法
莱尔德--TIM Print™, 全新自动化印装工艺技术