CRC - uint64 到两个字节?



我正在使用这个CRC包来计算消息的XMODEM CCITT crc值。 crc 值为 uint64s,作者演示了

使用
// crc1 is a uint64
fmt.Printf("CRC is 0x%04Xn", crc1) // prints "CRC is 0x2C89"

如何在不使其成为字符串并拆分的情况下将其转换为两个字节?%04X是每字节 16 个基数两个字符,如果我正确理解 fmt 文档。

我只知道几件事:(1(,我正在为其编写适配器的硬件需要两个字节的CRC值。(2(,这个CRC包的作者表明uint64可以显示为0xFFFF,即两个字节。(3(,在线CRC计算器将这些值显示为两个字节,例如 https://www.lammertbies.nl/comm/info/crc-calculation.html。其余的对我来说是新的...

我刚刚发布了CRC软件包自述文件中的片段。由于 uint64 通常是 8 个字节,我真的不明白如何在不丢失数据的情况下做到这一点。

在线CRC计算和免费库

https://www.lammertbies.nl/comm/info/crc-calculation.html

LibCRC – C 语言的开源 CRC 库

https://www.libcrc.org/api-reference/

https://github.com/lammertb/libcrc/blob/master/src/crc16.c

/*
* uint16_t crc_16( const unsigned char *input_str, size_t num_bytes );
*
* The function crc_16() calculates the 16 bits CRC16 in one pass for a byte
* string of which the beginning has been passed to the function. The number of
* bytes to check is also a parameter. The number of the bytes in the string is
* limited by the constant SIZE_MAX.
*/
uint16_t crc_16( const unsigned char *input_str, size_t num_bytes ) {
// code Copyright (c) 1999-2016 Lammert Bies
}  /* crc_16 */

C 型uint16_t是 Go 型uint16

uint16 = uint16(uint64)

crc16 = 0xFFBB = uint16(0x000000000000000FFBB)

crc16[0], crc16[1] = byte(uint64>>8), byte(uint64)

crc16[0], crc16[1] = 0xFF, 0xBB = byte(0x000000000000000FFBB>>8), byte(0x000000000000000FFBB)


引用:

CRC-16-CCITT : https://en.wikipedia.org/wiki/Cyclic_redundancy_check

XModem 协议与 CRC:http://web.mit.edu/6.115/www/amulet/xmodem.htm

目前尚不清楚您是尝试获取 int64 值的两个最低字节,还是要获取两个字符串,每个字符串有两个十六进制数字。无论如何:

b1:=byte(crc1>>8)
b2:=byte(crc1&0xFF)
str1:=fmt.Sprintf("%02X",b1)
str2:=fmt.Sprintf("%02X",b2)

crc:=uint16(crc1)

上面,crc 是 2 个字节。

相关内容

  • 没有找到相关文章

最新更新