我尝试使用crcmod Python模块和2.7版本的Python解释器基于 CRC-16 算法评估适当的校验和。校验和参数是:
代码:
crc16 = crcmod.mkCrcFun(0x18005, rev=False, initCrc=0xFFFF, xorOut=0x0000)
print hex(crc16(str(int(0x5A0001))))
并且对于输入0x5A0001
,它会打印0x7E16
,而我应该得到类似0xCE0A
的内容。
我查看了http://www.lokker.net/Java/crc/CRCcalculation2.htm,计算出的值是0xACE
,这是正确的(相对于订单而言)。
答案 0 :(得分:2)
crcmod
工作正常。你没有给它你认为你给它的三个字节。您的str(int(0x5A0001))
提供七个字节,即ASCII字符5898241
- 0x5a0001
到十进制的转换。
要将字节0x5a 0x00 0x01
提供给它,您将改为(作为一种方法):
print hex(crc16("5a0001".decode("hex")))
打印0xace
。
答案 1 :(得分:0)
这是CRC-16 / CCITT-FALSE的python实现
def crc16(data : bytearray, offset , length):
if data is None or offset < 0 or offset > len(data)- 1 and offset+length > len(data):
return 0
crc = 0xFFFF
for i in range(0, length):
crc ^= data[offset + i] << 8
for j in range(0,8):
if (crc & 0x8000) > 0:
crc =(crc << 1) ^ 0x1021
else:
crc = crc << 1
return crc & 0xFFFF
答案 2 :(得分:0)
def crc16(数据:字节数组,偏移量,长度): 如果data为None或offset <0或offset> len(data)-1,并且offset + length> len(data): 返回0 打印(“ uzunluk =”,len(data)) 打印(数据)
import React, { useEffect, useState } from "react";
import ReactDOM from "react-dom";
function getRandomInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
async function fetchData(setState) {
const wait = getRandomInt(5);
await new Promise(resolve => setTimeout(resolve, wait * 1000));
setState(wait);
}
function Tile() {
const [title, setTitle] = useState("");
useEffect(() => {
fetchData(setTitle);
}, []);
return <div>{title}</div>;
}
function App() {
const [title, setTitle] = useState("");
useEffect(() => {
fetchData(setTitle);
}, []);
return (
<div>
<div>{title}</div>
<Tile />
<Tile />
<Tile />
<Tile />
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
答案 3 :(得分:0)
基于pycrc代码的CRC-16-ANSI和CRC-16-IBM的工作单功能示例。
易于修改,但不包括输入或输出反射功能:
def crc16(data: bytes):
xor_in = 0x0000 # initial value
xor_out = 0x0000 # final XOR value
poly = 0x8005 # generator polinom (normal form)
reg = xor_in
for octet in data:
# reflect in
for i in range(8):
topbit = reg & 0x8000
if octet & (0x80 >> i):
topbit ^= 0x8000
reg <<= 1
if topbit:
reg ^= poly
reg &= 0xFFFF
# reflect out
return reg ^ xor_out