來源:公眾號【魚鷹談單片機】
作者:魚鷹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語言
+關注
關注
183文章
7644瀏覽量
145588 -
串口
+關注
關注
15文章
1619瀏覽量
82822 -
字符串
+關注
關注
1文章
596瀏覽量
23165 -
十六進制
+關注
關注
2文章
32瀏覽量
39029
原文標題:絕了,還能這么轉化十六進制字符串-C語言騷操作
文章出處:【微信號:emOsprey,微信公眾號:魚鷹談單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
labview中浮點數與十六進制字符串相互轉化
與下位機數據交流及通訊時,經常有浮點數與十六進制字符串相互轉化的需求,經過兩天總結,找到了最簡潔的相互轉化的方法,萌新歡迎大佬指正,文件也附上。*附件:HEX
發表于 10-21 19:51
十六進制數字符串至數值轉換的問題
`通過串口發送和接收數據。接收到的十六進制數據想要變為十進制數據輸出。但是用“十六進制數字符串至數值轉換”這個空間最后的顯示結果是0。自認為是十六進
發表于 04-09 10:47
字符串十進制轉十六進制
下位機發送的報文都是十六進制的,如顯示999發送過來的報文就是09 09 09、(把999拆成三個9)用上圖的方法我已經把下位機的保溫解析,但是現在我想反轉手動輸入十進制的字符串轉成十六進制
發表于 05-26 13:19
十六進制數字符串至數值或字符轉換的問題
本帖最后由 zhuimengren2034 于 2015-10-9 15:08 編輯
通過串口直接收到的十六進制數,想要通過程序自動顯示為十進制數;字符串是0102FFFE(每四位表示一個
發表于 10-09 15:03
Labview十進制數據轉化成十六進制字符串(十六進制顯示)
希望走過路過的大神幫我解決一下這個問題! 問題描述:通過Labview向下位機發送數據為十六進制的字符串,其中有一部分是數值轉換成十六進制的字符串,程序如下圖所示圖中的這兩處
發表于 05-16 10:53
數據轉換、SQL存儲,十六進制字符串、正常字符串
到了這個方法。方法:將所有亂碼的 ,不亂碼的數據顯示成十六進制,如下圖所示,把正常顯示的字符串更換為16進制顯示,當顯示為16進制字符串時,
發表于 05-27 10:29
二進制字符串到十六進制字符串轉換,十六進制字符串顯示為ASCII碼,拿來分享
自己用labview做的二進制字符串到十六進制字符串轉換,十六進制字符串顯示為ASCII碼,拿來
發表于 01-24 11:18
stm32十六進制字符串轉十進制數值代碼
stm32十六進制字符串轉十進制數值代碼CSDN不會用,文檔寫在語雀內轉載請注明作者:DK127、Holinkity代碼僅供參考,不允許用來賺CSDN幣謝謝附上參考代碼:https
發表于 01-12 18:34
?42次下載
HTA:將十六進制數轉換為ASCII字符串
使用該指令,可以將在輸入 IN 中指定的十六進制數轉換為 ASCII 字符串。轉換結果存儲到參數 OUT 指定的地址中。
HTA:將十六進制數轉換為 ASCII 字符串
說明 使用該指令,可以將在輸入 IN 中指定的十六進制數轉換為 ASCII 字符串。轉換結果存儲到參數 OUT 指定的地址中。 使用參數 N,可指定待轉換十六進制字節的數量。由于 ASCII
如何轉化十六進制字符串
評論