來源:公眾號【魚鷹談單片機】
作者:魚鷹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文章
7605瀏覽量
136976 -
串口
+關注
關注
14文章
1555瀏覽量
76578 -
字符串
+關注
關注
1文章
579瀏覽量
20534 -
十六進制
+關注
關注
2文章
32瀏覽量
37751
原文標題:絕了,還能這么轉化十六進制字符串-C語言騷操作
文章出處:【微信號:emOsprey,微信公眾號:魚鷹談單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論