【问题标题】:Separate data and store in array分离数据并存储在数组中
【发布时间】:2017-01-30 10:47:52
【问题描述】:

我在修复我得到的值的字节顺序时遇到问题。

我的想法是将WORD 分成两个,将它们转换为十六进制,然后将它们存储在一个数组中。

WORD 是返回到我之前的问题(已回答)的“crc_data”。

MODBUS RTU CRC16 calculation

例如:

我从以下代码中得到一个“结果”数据:

crc_data = 0A95

*注意:crc_data 是数据类型 WORD

我的想法是将它们分成两部分,并将它们设为十六进制。像这样:

value_1 = 0x95
value_2 = 0x0A

有没有办法做到这一点?我读过一些关于“BITWISE”操作的内容,但我不确定这是否是这样做的方法。

【问题讨论】:

    标签: c string hex endianness crc16


    【解决方案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;
    

    另一种选择是使用联合。基本上有很多方法可以做到这一点。

    【讨论】:

    • 谢谢!但我将 (crc_data > 8) & 0xFF 以调整我需要的内容
    • 很高兴它有帮助!我用>> 编辑了我的帖子。本来应该是这样的——只是弄混了——抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多