go语言crc8代码 goc编程语言

const unsigned char *p = (const unsigned char*)&res; crc8(crc, p[3]); crc8(crc, p[2]);

由于res定义为unsigned int,所以包含4个字节;而p是unsigned char的指针,指向的数据是1个字节。

成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站设计、网站制作、黄冈网络推广、成都小程序开发、黄冈网络营销、黄冈企业策划、黄冈品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供黄冈建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

所以常规来说,假如res由byte3 byte2 byte1 byte0构成,那么p[0]=byte0,p[1]=byte1,p[2]=byte2,p[3]=byte4,也就是p[0]是最低字节,p[3]是最高字节。

但是还要看系统硬件连接,是big endian还是 little endian,如果是 little endian那么就是常规情况,和上面一样。如果是big endian,那么数据存放是倒过来的,也就是p[0]是最高字节,p[3]是最低字节,全部情况是p[0]=byte3,p[1]=byte2,p[2]=byte1,p[3]=byte0。

哪位大哥用java写过CRC8校验, 多项式X7 +X6 +X5 +X2 +1,求代码?

代码如下

public static byte CRC8(byte[] buffer)

  {

      byte crc = 0;

      for (int j = 0; j buffer.Length; j++)

      {

          crc ^= buffer[j];

          for (int i = 0; i 8; i++)

          {

              if ((crc 0x01) != 0)

              {

                  crc = 1;

                  crc ^= 0x8c;

              }

              else

              {

                  crc = 1;

              }

          }

      }

      return crc;

  }

求并行 CRC8 的 verilog 代码,多项式为 X8+X5+X4+X3+1(0x39)

在线生成工具

这个生成的是function,不可综合的。自己改成module就行了

////////////////////////////////////////////////////////////////////////////////

// Copyright (C) 1999-2008 Easics NV.

// This source file may be used and distributed without restriction

// provided that this copyright statement is not removed from the file

// and that any derivative work contains the original copyright notice

// and the associated disclaimer.

//

// THIS SOURCE FILE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS

// OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED

// WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.

//

// Purpose : synthesizable CRC function

// * polynomial: (0 3 4 5 8)

// * data width: 8

//

// Info : tools@easics.be

//

////////////////////////////////////////////////////////////////////////////////

module CRC8_D8;

// polynomial: (0 3 4 5 8)

// data width: 8

// convention: the first serial bit is D[7]

function [7:0] nextCRC8_D8;

input [7:0] Data;

input [7:0] crc;

reg [7:0] d;

reg [7:0] c;

reg [7:0] newcrc;

begin

d = Data;

c = crc;

newcrc[0] = d[6] ^ d[5] ^ d[4] ^ d[3] ^ d[0] ^ c[0] ^ c[3] ^ c[4] ^ c[5] ^ c[6];

newcrc[1] = d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[1] ^ c[1] ^ c[4] ^ c[5] ^ c[6] ^ c[7];

newcrc[2] = d[7] ^ d[6] ^ d[5] ^ d[2] ^ c[2] ^ c[5] ^ c[6] ^ c[7];

newcrc[3] = d[7] ^ d[5] ^ d[4] ^ d[0] ^ c[0] ^ c[4] ^ c[5] ^ c[7];

newcrc[4] = d[4] ^ d[3] ^ d[1] ^ d[0] ^ c[0] ^ c[1] ^ c[3] ^ c[4];

newcrc[5] = d[6] ^ d[3] ^ d[2] ^ d[1] ^ d[0] ^ c[0] ^ c[1] ^ c[2] ^ c[3] ^ c[6];

newcrc[6] = d[7] ^ d[4] ^ d[3] ^ d[2] ^ d[1] ^ c[1] ^ c[2] ^ c[3] ^ c[4] ^ c[7];

newcrc[7] = d[5] ^ d[4] ^ d[3] ^ d[2] ^ c[2] ^ c[3] ^ c[4] ^ c[5];

nextCRC8_D8 = newcrc;

end

endfunction

endmodule

java的crc8校验,按指定多项式,求助

以下是我的分析,不知是否正确,你参考下1、首先来看你打java代码:crc=(byte)((crc1)^0x8c);和 crc=(byte)(crc1); 导致这个问题是因为byte的最高位符号位,转换的时候就出错了2、示例代码:package com.test;public class test {public static void main(String[] args) {byte[] ptr = { 1, 1, 1, 1, 1, 1 };byte res = getCrc(ptr);System.out.println();System.out.println((byte)( (1 1) ^ 0x8c ) + ":" +( (1 1) ^ 0x8c ) );}public static byte getCrc(byte[] ptr) {int crc = 0;for (int i = 0; i 1) ^ 0x8c;} else {crc = crc 1;}}}return (byte) crc;}}

求一个C# CRC8 的算法代码 生成多项式可以随意选 能够得到CRC码 然后调用函数

public static byte CRC8(byte[] buffer,byte poly)

{

byte crc = 0;

byte CRCPoly = poly;

for (int j = 0; j buffer.Length; j++)

{

crc ^= buffer[j];

for (int i = 0; i 8; i++)

{

if ((crc 0x80) != 0)

{

crc = 1;

crc ^= CRCPoly;

}

else

{

crc = 1;

}

}

}

crc = Convert.ToByte(crc ^ 0x00);

return crc;

}

如何用易语言crc8

由于多项式的最高为都为1,并且在代码的crc8计算中,最高位也是不使用的,

所以在多项式记录时都去掉了最高位。

CRC校验算法,说白了,就是把需要校验的数据与多项式进行循环异或(XOR),

但进行XOR的方式与实际中数据传输时,是高位先传、还是低位先传有关。对于数据

高位先传的方式,XOR从数据的高位开始,我们就叫它顺序异或吧;对于数据低位先

传的方式,XOR从数据的低位开始,我们就叫它反序异或吧。两种不同的异或方式,

即使对应相同的多项式,计算出来的结果也是不一样的。

下面以顺序异或的例子说明一些计算的过程:

使用多项式:x8+x5+x4+1(二进制为:100110001)

计算一个字节:0x11(二进制为:00010001)

计算步骤:

A、 因为采用顺序异或,所以需要计算的数据左移8位,

移位后数据为:0001 0001 0000 000

B、 先进行高9bit异或(多项式为9bit),0001 0001 0000 0000,因为高9bit的

最高bit为0,不需要进行异或,同理,接下来的两bit也是0,也不需要进行进行异或。

这样处理后数据为:1 0001 0000 0000;

C、 接下来最高位为1,需要进行异或操作了

(搬运by:简单的过客)


当前文章:go语言crc8代码 goc编程语言
网页URL:http://scyanting.com/article/hjodjo.html