2016-09-22 56 views
0

我有問題修復我得到的值的字節順序。單獨的數據和存儲在數組

我在想的是將WORD分隔爲兩個,將它們轉換爲十六進制,並將它們存儲在一個數組中。

WORD是「crc_data」,返回到我以前的問題(已回答)。

MODBUS RTU CRC16 calculation

例如:

我接到的代碼 「結果」 數據:

crc_data = 0A95 

*注:crc_data是數據類型WORD

我是什麼思維將它們分成兩部分,並將它們作爲十六進制。像這樣:

value_1 = 0x95 
value_2 = 0x0A 

有沒有辦法做到這一點?我讀了一些關於「BITWISE」操作的內容,但我不確定是否需要這樣做。

回答

1

您可以投到char*。你可以這樣做:

crc_data = 0x0A95 
const unsigned char *k = (const unsigned char*) &crc_data; 
value_1 = k[0]; 
value_2 = k[1]; 

char指針只是讓你把數據看作是一串字節。然後您可以用[]表示法閱讀它們。

另一種方法是使用數學來獲得上部和下部。位移運算符<<會將數據向下移動8位。這與除以256相同。

crc_data = 0x0A95; 
value_1 = crc_data & 0xFF; 
value_2 = (crc_data >> 8) & 0xFF; 

另一種選擇是使用聯合。基本上有很多方法可以做到這一點。

+0

謝謝!但我改變(crc_data << 8)&0xFF <到(crc_data >> 8)&0xFF來調整我需要的東西 –

+0

很高興它有幫助!我用'>>'編輯了我的帖子。這就是它應該是的 - 剛剛混合起來 - 對不起。 – andreas1