2016-09-22 4 views
0

私が持っている値のエンディアンを修正することに問題があります。データを分離して配列に格納する

私が考えているのは、WORDを2つに分け、それらを16進数に変換して配列に格納することです。

WORDは「crc_data」で、これは私の前の質問に返されています(回答済みです)。例えば

MODBUS RTU CRC16 calculation

私はのコードから "結果" のデータを得た:

crc_data = 0A95 

*注:crc_dataは、私はどのようなデータ型WORD

です思考はそれらを2つに分け、それらを16進数にします。このように:

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ポインタを使用するだけで、データをバイト列として扱うことができます。その後、[]表記でそれらを読むことができます。

もう1つの方法は、数式を使用して上部と下部を取得することです。ビットシフト演算子<<は、データを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

関連する問題