- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在创建 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/
我正在制作一个程序,它将与引导加载程序通信以更新微 Controller 的固件。除了CRC 计算,一切都准备就绪。 我使用 here 的 CRC 计算函数计算多项式 x16 + x12 + x5 +
问题 我正在为嵌入式设备编写代码。 CRC-CCITT 16位计算的许多解决方案都需要库。 鉴于使用库几乎是不可能的,并且会消耗其资源,因此需要一个功能。 可能的解决方案 在网上找到以下CRC计算。但
基于 Online CRC calculation , 当我输入十六进制字符串数据 = 503002080000024400003886030400000000010100 我得到结果 CRC-CCI
试图理解this在解释 CRC16 CCITT 时,我遇到了术语“截断多项式”。将一个字节消息的长手计算与相应的C代码进行比较,发现poly的宏定义与上面的计算示例不符。在 C 代码中,多项式是 0x
我有一组十六进制值。我已经预先计算了它的 CRC-CCITT (0x1d0f),它是:0xD7F2 我基于用 javascript 编写的工作 crc alghoritm 编写了一个 alghorit
我正在分析来自使用 CRC-CCITT16 (Kermit) 的 GPS 的提要对于下面的消息 来自 GPS 设备的消息: (byte) 0x3,(byte) 0xfb,(byte) 0x0,(byt
有人知道 CRC16-CCITT 的一些 CRC 测试向量吗? ? 我没有可以信任的 CRC 实现,需要测试某人的实现或我自己的实现。 (对于 CRC32,我使用 PNG code 作为黄金标准,因为
有人可以帮我用 Delphi 实现 CRC-CCITT (0xFFFF) 吗? 已经获得 Java 版本,但对如何将其移植到 Delphi 感到困惑 public static int CRC16CC
我正在尝试获取 16 位 CRC CCITT FALSE。我正在使用此页面来检查它。 http://www.sunshine2k.de/coding/javascript/crc/crc_js.htm
我正在使用 boosts crc CCITT。我需要随意输入 crc 计算的值,因此数组大小会有所不同,这就是我选择动态数组的原因。但问题是当我使用动态数组时得到不同的结果,这是为什么?还是我在这里做
我如何快速实现 CRC-CCITT。我设法让它在 Java 上运行 public static String createCRC(String string) { String crcCode
我想从字节码播放音频文件。我已经有了音频文件的字节码。但是当我使用 System.Media.SoundPlayer 播放时,出现错误“{Sound API 仅支持播放 PCM 波形文件。”}。我的音
我遇到了一个据称非常高效和优雅的 CRC 实现,我正试图真正理解所有步骤。我了解迭代每一位的 CRC-CCITT 0x1021 实现,但我正在努力获得这一点。这是代码。 /* * Original C
我正在寻找对 CCITT Group 4 压缩算法的足够描述,以便我可以从中编写功能代码。有谁知道在哪里可以找到它? 最佳答案 您可以在此处找到规范:http://www.itu.int/rec/T-
这是一个关于 TIFF 和压缩的问题。我有数百个 LZW 压缩的 tiff 图像。我想知道,是否可以将它们转换为 CCITT T.6?有一些API吗?请帮忙。 最佳答案 LZW 压缩几乎可以用来压缩任
有没有人使用过将图像编码为 ccitt 的 PDF。我使用 Xamarin,几乎所有的 pdf 似乎都可以工作。但是这种编码似乎很困难。该应用程序适用于 iOS。页面大小正确但完全空白。 var pa
我需要计算作为参数传递的数据的 CCITT 16 位校验和值以及长度。如果我用测试数据“123456789”填充我的数组 TempStr,使用长度不包括空终止字符的多项式 0x8408,我得到结果字符
在这个问题的答案中:c++ decode CCITT encoded images in pdfs 指出libtiff可用于解码CCITT编码的图像。当然,我们必须预先添加一个 TIFF header
嗨我通过蓝牙连接接收了一些数据。该数据有一个 16 位 CRC 16-CCITT block ,我想使用它来验证数据是否已成功传输且没有错误。java或android中是否有任何内置方法可以帮助我,或
创建 tiff 文件,使用 LZW 压缩(默认):- System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(800, 1000); Grap
我是一名优秀的程序员,十分优秀!