給了一個資料a=352;型別:int,位元組長度:4
要把這個資料寫入設備,通過固定協議,協議為hex格式,
(即將352 分成4個位元組,不足高位補0,(以兩個數作為單獨的一個位元組 如當前的為3 52),轉換為hex的0x00 0x00 0x03 0x34 )存盤在buf中,
請問用什么方法實作轉換并存盤
uj5u.com熱心網友回復:
位元組不是這個意思你描述得太亂 無法理解
352
4個位元組的內容是 0x00 0x00 0x01 0x60
不是03一個位元組 52一個位元組
uj5u.com熱心網友回復:
我意思是能否把352分成3和52,然后再以這種轉為16進制!!就是原資料兩個兩個的拆分開,再把拆分后的轉為16進制
uj5u.com熱心網友回復:
因為現在是這種情況,就是352這個資料可能是這種組合形式(xxxxxxxx),收到設備的指令hex為 00 00 03 34,然后這些資料轉為10進制是 0 0 3 52,按上面那種組合形式就是00352,去掉前面的0,就是352(就是說這個352可能是組合的值),所以現在就是要反過來,將352轉為 00 00 03 34,該怎么實作,大佬指點一下
uj5u.com熱心網友回復:
不用這么麻煩吧,直接全部轉網路位元組序,不分設備,大端小端的,接收方再轉回來。
uj5u.com熱心網友回復:
可以用強轉,比如int a = 0x352;
unsigned char buf[4];
memcpy(buf, &a, 4);
這樣就放到buf里了。
其實也不用用buf這個變數,也可以
((unsigned char *)&a)[0], ((unsigned char *)&a)[1], ((unsigned char *)&a)[2], ((unsigned char *)&a)[3],
uj5u.com熱心網友回復:
需要注意下大小端的情況,先在一個小程式里試一下,然后了解大端和小端的情況再考慮發過去
uj5u.com熱心網友回復:
直接對陣列進行賦值就行啦,在記憶體中就是以16進制的方式保存的。 unsigned char buff[4] = { 0 };
buff[2] = 3;
buff[3] = 52;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/88682.html
標籤:C語言
上一篇:c語言gets函式不起作用
下一篇:越改越懵,求大佬,謝謝
