gpt4 book ai didi

c - 缺少这个 CRC-CCITT (Initial Value 0xFFFF) Encode 怎么办?

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:51 24 4
gpt4 key购买 nike

我正在创建 CRC-CCITT 编码(Polynomail 0x1021,初始值为 0xFFFF) 它是正确的 8 位、16 位、24 位、32 位...(1 字节、2 字节、3 字节...) 但不是正确答案 12bit, 20bit, 28bit (not Byte)

I find this algorithm

function crc(bit array bitString[1..len], int polynomial) {
shiftRegister := initial value // 00000000 OR 11111111
for i from 1 to len {
if (shiftRegister top bit) xor bitString[i] = 1
shiftRegister := (shiftRegister left shift 1) xor polynomial
else
shiftRegister := shiftRegister left shift 1
}
return shiftRegister
}

我的源代码就是这样

    // crc_ccitt.h
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

static const char CRC_CCITT[] = "0001000000100001";
static char Shift_Register[] = "1111111111111111";

char* getCRC(char *, int);
void leftShift(char *);
void xorCalc();

char* getCRC(char* dataCode, int dataCodeLength) {
int i;

for (i = 0; i < dataCodeLength; i++) {
if ((Shift_Register[0] == '1' && dataCode[i] == '0')
|| (Shift_Register[0] == '0' && dataCode[i] == '1')) {
leftShift(Shift_Register);
xorCalc();
} else {
leftShift(Shift_Register);
}
printf("%c%c%c%c ", Shift_Register[0], Shift_Register[1], Shift_Register[2], Shift_Register[3]);
printf("%c%c%c%c ", Shift_Register[4], Shift_Register[5], Shift_Register[6], Shift_Register[7]);
printf("%c%c%c%c ", Shift_Register[8], Shift_Register[9], Shift_Register[10], Shift_Register[11]);
printf("%c%c%c%c ", Shift_Register[12], Shift_Register[13], Shift_Register[14], Shift_Register[15]);
printf("\n");
}

return Shift_Register;
}

void leftShift(char *Shift_Register) {
memmove(Shift_Register, Shift_Register + 1, strlen(Shift_Register) - 1);
memset(Shift_Register + strlen(Shift_Register) - 1, '0', 1);
}


void xorCalc() {
int i;

for (i = 0; i < 16; ++i) {
if ((Shift_Register[i] == '1' && CRC_CCITT[i] == '0')
|| (Shift_Register[i] == '0' && CRC_CCITT[i] == '1')) {
Shift_Register[i] = '1';
} else {
Shift_Register[i] = '0';
}
}
}

// crc_ccitt.c
#include "crc_ccitt.h"

int main() {
char dataCode[256];
char *CRC = "";
printf("Input Data Code: ");
gets(dataCode);

/*
puts(dataCode);
rightShift(dataCode);
puts(dataCode);
*/

CRC = getCRC(dataCode, strlen(dataCode));
//printf("%s", CRC);
return 0;
}

我用这个页面确认 CRC 编码值 http://www.lammertbies.nl/comm/info/crc-calculation.html

例如

Input 0001111111110010(1FF2)

page : C11F

my program : 1100 0001 0001 1111 (C11F)

但是

Input 000111111111 (1FF)

page : FFAD

my program : 1101 0011 0000 1111 (D30F)

我的程序少了怎么办??

或者,是不是算法错了??

最佳答案

程序正常
算法OK
用户输入可能是错误。

您的 CRC“0001000000100001”用于 16 位运算。
您的失败输入是“000111111111”,12 位。而是尝试使用“0000000111111111”或“0001111111110000”(在左侧或右侧填充)

注意:我自己也试过,但是你没有提供crc_ccitt.h

关于c - 缺少这个 CRC-CCITT (Initial Value 0xFFFF) Encode 怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16686094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com