由于涉及长数学,我在理解如何计算CRC时遇到问题.我理解像XOR这样的东西,但所有的例子都使用了很长的数字.什么是步骤的细分和一个非常简单的例子?
我创建了一个大小为100的列表,并使用以下代码在python中使用8位数据填充数组,我想使用zlib.crc32()函数计算CRC值.
Init_RangenCrc8 = []
for i in range(0,100):
Init_RangenCrc8.append(random.randrange(0, 255, 1))
crc8_python = zlib.crc32(Init_RangenCrc8, 0xFFFF)
Run Code Online (Sandbox Code Playgroud)
当我返回并打印crc8_python时,我没有得到任何价值.
任何帮助将不胜感激,谢谢.
我在将javascript函数转换为delphi时遇到了一些麻烦.除了crc部分,一切正常.
这是一个很长的问题,但我真的需要帮助.这个软件将帮助我完成我的工作.我正在使用Delphi XE3.
首先,我将发布delphi函数,以便我可以显示问题所在.
function getChlg(c: DWORD; slt: string; s1,s2: Char): string;
const
n = 4;
var
arr: array of char;
start,Endd,t: Integer;
m: Extended;
crc: DWORD;
chlg, astr: string;
//loop vars
i,j,k: integer;
begin
start:=Ord(s1);
Endd:=Ord(s2);
SetLength(arr, n);
m:=Math.Power(((Endd - start) + 1),n);
for i := 0 to 3 do
arr[i]:=s1;
for i := 0 to round(m)-1 do
begin
for j:= n-1 downto 0 do
begin
t:=Ord(arr[j]);
Inc(t);
arr[j]:=Chr(t);
if (Ord(arr[j]) <= Endd) then
break
else
arr[j]:=s1;
end; //j …Run Code Online (Sandbox Code Playgroud) 更新:我甚至无法使用此计算器来重现本数据表图8和图9中所示的SMBus PEC !
所以我将arduino与Melexis温度传感器连接起来,并且它没有问题 - 除了我似乎无法使CRC检查工作.
我已经成功完成了读取操作(尽管我的软件忽略了数据包错误代码)但我已经尝试了很多CRC8的实现来检查PEC字节无济于事.我现在使用的代码块来自OneWire:
uint8_t OneWire::crc8(const uint8_t *addr, uint8_t len)
{
uint8_t crc = 0;
while (len--) {
uint8_t inbyte = *addr++;
for (uint8_t i = 8; i; i--) {
uint8_t mix = (crc ^ inbyte) & 0x01;
crc >>= 1;
if (mix) crc ^= 0x8C;
inbyte >>= 1;
}
}
return crc;
}
Run Code Online (Sandbox Code Playgroud)
我重写它只考虑一个字节:
int smbCRC(int message) {
uint8_t crc = 0;
uint8_t inbyte = message & 0xFF;
for (uint8_t i = …Run Code Online (Sandbox Code Playgroud) 我有以下CRC功能:
public static ushort ComputeCRC16(byte[] data)
{
ushort i, j, crc = 0;
int size = data.Length;
for (i = 0; i < size - 2; i++)
{
crc ^= (ushort)(data[i] << 8);
for (j = 0; j < 8; j++)
{
if ((crc & 0x8000) != 0) /* Test for bit 15 */
{
crc = (ushort)((crc << 1) ^ 0x1234); /* POLYNOMIAL */
}
else
{
crc <<= 1;
}
}
}
return crc;
}
Run Code Online (Sandbox Code Playgroud)
我一直在试图用它来计算从一个文件即大约800 KB一个CRC16,但它需要永远,我的意思是五分钟后,价值i …
我正在尝试编写一个函数,以将设备的CRC 32输出与我计算出的实际CRC-32总和相匹配。以下是我的代码:
#include <iostream>
#include <string.h>
#define CRC32_POLYNOMIAL 0xEDB88320
using namespace std;
unsigned int crc32b(unsigned char *message,size_t l)
{
int i, j;
unsigned int byte, crc, mask;
i = 0;
crc = 0xFFFFFFFF;
while (i<l) {
byte = message[i]; // Get next byte.
crc = crc ^ byte;
for (j = 7; j >= 0; j--) { // Do eight times.
mask = -(crc & 1);
crc = (crc >> 1) ^ (0xEDB88320 & mask);
}
i = i + …Run Code Online (Sandbox Code Playgroud) 我正在尝试计算 CRC-6 GSM,但结果是错误的(16 美元)。对于“123456789”,根据 https://reveng.sourceforge.io/crc-catalogue/all.htm#crc.cat.crc-6-gsm ,它应该返回 13 美元
var Table: array[0..255] of Byte = (
$3F, $10, $0E, $21, $32, $1D, $03, $2C,
$25, $0A, $14, $3B, $28, $07, $19, $36,
$0B, $24, $3A, $15, $06, $29, $37, $18,
$11, $3E, $20, $0F, $1C, $33, $2D, $02,
$38, $17, $09, $26, $35, $1A, $04, $2B,
$22, $0D, $13, $3C, $2F, $00, $1E, $31,
$0C, $23, $3D, $12, $01, $2E, $30, $1F,
$16, $39, $27, $08, $1B, $34, $2A, $05,
$31, …Run Code Online (Sandbox Code Playgroud)