c - 分离数据并存储在数组中

标签 c string hex endianness crc16

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

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

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

MODBUS RTU CRC16 calculation

例如:

我从以下代码中获得了“结果”数据:

crc_data = 0A95

*注意:crc_data 是数据类型 WORD

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

value_1 = 0x95
value_2 = 0x0A

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

最佳答案

您可以转换到 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;

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

关于c - 分离数据并存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39629189/

相关文章:

c - 自由的();和 malloc();不断崩溃(C)

python - 为什么 ByteArray() 组合数组值? (Python)

python - 如何将 C 二进制缓冲区转换为 Python 字符串中的十六进制表示?

C++ 将字符数组转换为十六进制字符串

c - 动态字符串数组

c++ - 不能同时将 ascii 字符转换为 int 和 hex

C# 读取HEX串口数据并发送给Streamwriter

C如何定义一个可以被预处理器检查的上下文

c++ - 寄存器变量地址

c - 如何在 C 中的 switch 中使用格式说明符