python - 如何在python中重建libmem_crc32_direct CRC函数?
问题描述
我喜欢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 - 在 pygame 中渲染图像,在另一个图像上进行 blitting
- java - 生产中的循环依赖,而不是开发中的循环依赖
- c# - 在 C# Azure 函数中使用 ShareFileClient 将文件逐行写入 Azure Blob 文件共享
- spring - Spring mvc HTTP 状态 404 - GET /spring-mvc/login 没有映射
- python-3.x - PyQt5 returnPressed.connect“在函数中找不到引用'connect'”
- java - 如何忽略与模式“if (log.isDebugEnabled()) {”匹配的行的 CheckStyle 规则
- python - GCP AI Platform(统一)Python export_model FailedPrecondition: 400 Exporting artifact in format ``不支持
- bash - 如何计算文件中每一行中某个元素的出现次数(bash)
- r - 为R中向量的重复值分配序列号
- javascript - 如何获取此 api 中的所有 87 个对象