我有一个包含十六进制值的 char 数组。它包含 6 个字节。我计算了这 6 个字节的 crc,函数返回 int 值。这是代码。
char buffer[] = {0x01,0x05,0x00,0x06,0x00,0x00};
byte[] bufferbyte = new String(buffer).getBytes();
for (byte bb : bufferbyte){
System.out.format("0X%x ", bb);
}
int crcresult;
crcresult = CRC16(buffer,6); //crc calculation
byte[] crc_bytes = ByteBuffer.allocate(4).putInt(crcresult).array();
for (byte b : crc_bytes){
System.out.format("0X%x ", b);
}
我的问题是
我使用 bytebuffer 将作为 int 获得的 crc 转换为字节。但是计算出的 crc 存储在 4 字节而不是 2 字节中。我计算了 CRC 16,但结果 crc 是 32 位。我认为这是因为我在 crc 计算中返回了“int”,并且在 java 中写入的 int 是 32 位。
那么如何从字节缓冲区(crc_bytes)或计算出的int crc(crcresult)中只提取两个字节。
我已将“char buffer[]”的字节和计算出的 crc 的两个字节放入单字节数组中。我们如何追加
char buffer[] and crcresult
在一个字节数组中。
上面代码的输出是
0X1 0X5 0X0 0X6 0X0 0X0 0X0 0X0 0X2d 0Xcb
其中前 6 个字节是从 char 数组转换而来的字节,后 4 个字节是 crc。