作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我喜欢重建libmem_crc32_direct
python 中的函数。
我之前使用过crcmod
python 包。所以我喜欢用它来设置 crc 生成器。
C 代码如下所示:
uint32_t crc_process_chunk(uint8_t* data, uint32_t len) {
return ~libmem_crc32_direct(data, len, 0xFFFFFFFF);
}
我的Python代码到目前为止看起来:
def bit_not(n, numbits=8):
return (1 << numbits) - 1 - n
def getCRC(imageBA):
crcGen = crcmod.mkCrcFun(0x104C11DB7, initCrc=0xFFFFFFFF)
val = crcGen(imageBA)
val = bit_not(val, 32)
return val
python代码的返回值与c中的返回值不同。所以我想我犯了一些错误。
有什么想法吗?
最佳答案
不是 (1 << numbits) == 0 吗?如果这是二进制补码数学,它应该可以工作,因为 bit_not 可以返回 0-1-n。但是,这不是必需的,因为 crcmod 有一个可选的 xorOut 参数。我认为,由于反向(反射)输入和输出的可选 rev 参数默认为 true,因此需要将其设置为 false。我认为创建 crc 生成器的调用应该是:
crcGen = crcmod.mkCrcFun(0x104C11DB7, initCrc=0xFFFFFFF, rev=False, xorOut=0xFFFFFFFF)
关于python - 如何在python中重建libmem_crc32_direct CRC函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56993087/
我是一名优秀的程序员,十分优秀!