2016-09-22 53 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