來源:公眾號【魚鷹談單片機】
作者:魚鷹Osprey
ID :emOsprey
前段時間移植了 tinyUSB 開源庫,使 STM32F013C8T6 成功模擬了 7 個串口 獨立的 CDC 設(shè)備(參考了知乎上一篇文章,不過那個實現(xiàn)還有一些問題,并且不能單獨設(shè)置每個串口的波特率)。
后面又移植了 lwip ,成功實現(xiàn)了虛擬網(wǎng)絡(luò)適配器:
于是準(zhǔn)備看看源碼實現(xiàn),突然發(fā)現(xiàn)一條看不懂的代碼:
_desc_str[1+chr_count++] = "0123456789ABCDEF"[(tud_network_mac_address[i] >> 4) & 0xf];
乍看一下,字符串不像字符串,數(shù)組也不像,直到看到說明,才大概明白,運行之后,顛覆三觀了。。。
完整代碼如下:
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 地址轉(zhuǎn)化為 16 進制,并且還是 utf-16格式(16 bit 一個字符)
最終轉(zhuǎn)化效果如下(16bit 和字符串顯示):
并且雖然"0123456789ABCDEF" 寫了兩次,但內(nèi)存中只有一份拷貝,因此并不會占用更多空間,并且因為使用索引形式,效率也是杠杠滴!
嗯,以后十六進制轉(zhuǎn)化就用這個代碼了。
審核編輯:湯梓紅
-
C語言
+關(guān)注
關(guān)注
180文章
7614瀏覽量
137739 -
串口
+關(guān)注
關(guān)注
14文章
1558瀏覽量
77072 -
字符串
+關(guān)注
關(guān)注
1文章
585瀏覽量
20604 -
十六進制
+關(guān)注
關(guān)注
2文章
32瀏覽量
37843
原文標(biāo)題:絕了,還能這么轉(zhuǎn)化十六進制字符串-C語言騷操作
文章出處:【微信號:emOsprey,微信公眾號:魚鷹談單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
labview中浮點數(shù)與十六進制字符串相互轉(zhuǎn)化
十六進制數(shù)字符串至數(shù)值轉(zhuǎn)換的問題
字符串顯示轉(zhuǎn)換十六進制顯示
字符串十進制轉(zhuǎn)十六進制
十六進制數(shù)字符串至數(shù)值或字符轉(zhuǎn)換的問題
十六進制顯示的字符串怎么進行加法運算
Labview十進制數(shù)據(jù)轉(zhuǎn)化成十六進制字符串(十六進制顯示)
數(shù)據(jù)轉(zhuǎn)換、SQL存儲,十六進制字符串、正常字符串
二進制字符串到十六進制字符串轉(zhuǎn)換,十六進制字符串顯示為ASCII碼,拿來分享
stm32十六進制字符串轉(zhuǎn)十進制數(shù)值代碼

評論