我需要用Perl实现CRC-32 (用自定义多项式)。我已经看到有一个叫做的模块。然而,当我将结果与在线计算器进行比较时,我没有得到相同的CRC代码。
我的多项式是"101101“(bin)或"2d”(十六进制)。
我的数据是"1e5“
在线计算器是。我从计算器得到的结果是"1010“(bin)或"A”(十六进制)。
这是我使用过的Perl代码(在网上找到的)
use strict;
use warnings;
use Digest::CRC;
my $string = 0x01e5;
my $ctx = Digest::CRC->
我试图理解(并实现)多项式除法的函数。
我的第一步是理解和比较两个在线工具的结果。是一种形式GF(2)多项式计算器。是一个CRC多项式计算器。我期望形式计算器的其余部分等于CRC计算器的校验和。
因此,我在正式计算器中输入了以下数据:
A = 0100000101000001 (should be same as "AA" ASCII data)
B = 11111
我向CRC计算器输入了以下内容:
CRC order = 4
CRC polynom = F
Data sequence = AA
Initial = 0, Direct, no reverse input, no
有人能帮我计算32位CRC吗?
这是我用来计算32位CRC的代码。
static unsigned int crc32_table[256];
void make_crc_table()
{
int j;
unsigned int crc,byte, mask;
/* Set up the table, if necessary. */
if (crc32_table[1] == 0)
{
for (byte = 0; byte <= 255; byte++)
{
crc = byte;
for
我需要一个CRC检查的应用程序,我写,但无法搞清楚的在线代码和计算器,我做错了什么。我可能没能正确理解。这就是我需要的:
它使用启始值为0xFFFF的CRC-CCITT,具有反向输入位顺序.例如,Get设备类型消息是: 0x01、0x06、0x01、0x00、0x0B、0xD9。儿童权利委员会为0xD90B。
下面是我使用的代码:
public static int CRC16CCITT(byte[] bytes) {
int crc = 0xFFFF; // initial value
int polynomial = 0x1021; // 0001 0
我正在使用一个在线的CRC-32计算器来检查我的输出是否正确,但是看起来Wireshark对于以太网数据包有一个不同的预期FCS。
message2是以太网帧减去FCS,如Wireshark所示。
#include <stdio.h>
#include <stdint.h>
unsigned int crc32b(unsigned char *message) {
int i, j;
unsigned int byte, crc, mask;
i = 0;
crc = 0xFFFFFFFF;
while (message[i] != 0
我目前正在设置步进电机控制器和计算机之间的通信,在C#中编写应用程序(这是我第一次使用这种编程语言,虽然我不是计算机科学家,但我是一名工业工程师,原因是我确定有一些方法可以优化我不知道的功能,任何关于这一问题的建议也将非常感谢)。因此,我一直在使用RS-485,控制器必须与它通信,并且我已经实现了一个生成所需CRC(循环冗余校验)字节的算法。 这就是我的问题所在。我找不到为什么我的函数不能生成正确的CRC值。我已经检查了一些CRC的在线计算器,我还使用了Modbus Guide中的示例(其中还解释了代码是如何实现的)。 下面是我为CRC演算编写的代码: class Program
{
我用C语言实现了一个CRC32算法,但经过几个小时的环顾并试图修复它,它仍然不起作用。它会编译,但校验和与几个在线CRC计算器中的校验和不同。我怀疑错误在"if (0 != (character & j))“这一行,但我不理解它,因为它甚至与维基百科上的代码基本相同。
int CRC32_C(char *message){
int length, i, j;
unsigned long p,g;
char character;
p = 0x00000000;
g = 0x04C11DB7;
length = strlen(mes
我正在为CRC计算库编写测试工具,我正在为CRC-32C寻找参考测试向量。我找到了大量的CRC-32,但没有具体的CRC-32C。有人能给我指点推荐信吗?
我设法使用的联机计算器计算了这些值。
crc32c("") = 0
crc32c("The quick brown fox jumps over the lazy dog") = 0x22620404
然而,我甚至不确定我的设置是否正确。我所需要的只是引用一个可靠的源,它将提供很少像这样的测试向量。
我对十六进制值的crc计算器有点麻烦。事实上,我有一个很好的代码,可以用ASCII输入正确计算。
但我需要计算"44007A0004 .“无法转换为ASCII字符。如何改变我的函数来计算十六进制输入字符串crc?
public String CRC_CCITT( int flag,String str) {
int crc = 0x00; // initial value
int polynomial = 0x1021;
byte[] bytes = str.getBytes();
我看到了一些实现,但我决定研究规范如何调用FCS进行编码。
因此,假设我的意见如下:
dst: 0xAA AA AA AA AA AA
src: 0x55 55 55 55 55 55
len: 0x00 04
msg: 0xDE AD BE EF
按照似乎以格式指定的顺序(稍后在规范中表示的顺序)将其连接起来,似乎表明我的输入是:
M(x) = 0xAA AA AA AA AA AA 55 55 55 55 55 55 00 04 DE AD BE EF
a)“对帧的前32位进行补充。”
complemented first 32 MSB of M(x): 0x55 55 55 55 AA
我想定位Mule CRC32计算器和过滤器在我的流。我已经找到了计算器在我的第一个流量结束,就在回答之前。但是我该在哪里找到过滤器呢?在收到第二个请求之后?当我这样做时,我会得到以下错误:
Root Exception stack trace: org.mule.api.expression.RequiredValueException: Expression Evaluator "header" with expression "invocation:crc32" returned null but a value was required.
另一件可能导致此
我使用 CRC包来计算消息的XMODEM CCITT值。crc值为uint64s,作者使用以下方法演示将CRC代码的十六进制值打印为两个字节。
// crc1 is a uint64
fmt.Printf("CRC is 0x%04X\n", crc1) // prints "CRC is 0x2C89"
如何将其转换为两个字节,而不将其变为字符串并将其拆分?如果我正确地理解fmt文档,那么%04X是基本的--每个字节16个两个字符。
我只知道几件事:(1)我正在编写的硬件需要两个字节的CRC值适配器。(2)这个CRC包的作者表明,uint64可以显示为0xFF