當前位置:首頁 » 操作系統 » crc16源碼

crc16源碼

發布時間: 2024-06-21 19:06:08

① 工程上用到了MODBUS tcp 通訊,原來用過MODBUS RTU的協議,不知道他們的主要區別,或者誰有相應的源代碼

Modbus rtu和Modbus tcp兩個協議的本質都是MODBUS協議,都是靠MODBUS寄存器地址來交換數據;
但所用的硬體介面不一樣,Modbus
RTU一般採用串口RS232C或RS485/422,而Modbus TCP一般採用乙太網口。
現在市場上有很多協議轉換器,可以輕松的將這些不同的協議相互轉換 如:Intesisbox可以把modbus rtu轉換成Modbus
tcp實際上Modbus協議包括ASCII、RTU、TCP。
標準的Modicon控制器使用RS232C實現串列的Modbus。Modbus的ASCII、RTU協議規定了消息、數據的結構、命令和就答的方式,數據通訊採用Maser/Slave方式。
Modbus協議需要對數據進行校驗,串列協議中除有奇偶校驗外,ASCII模式採用LRC校驗,RTU模式採用16位CRC校驗.
ModbusTCP模式沒有額外規定校驗,因為TCP協議是一個面向連接的可靠協議。
TCP和RTU協議非常類似,只要把RTU協議的兩個位元組的校驗碼去掉,然後在RTU協議的開始加上5個0和一個6並通過TCP/IP網路協議發送出去即可。

② 求一個CRC校驗C++源代碼。題目:發送數據為1101011011,生成的多項式為P(X)=X4+X+1(X4為X的4次方),

下面的代碼輸入為原數據和多項式對就的二進制碼,輸出為產生的校驗碼。

如原數據是1101011011,多項式是X^4+X+1(即10011)。產生的校驗碼為1110。

輸入110101101110011

輸出1110

#include<iostream>
#include<cstring>
#include<iomanip>
usingnamespacestd;

#defineWORDSIZE255

intgetNum(chara[],intn);
voidshowNum(intr,intn);

intmain(intargc,char*argv[])
{
cout<<"pleaseinputXandP:"<<endl;
intx,p,lenA,lenP;
chara[WORDSIZE];
memset(a,'',WORDSIZE);
cin>>a;
lenA=strlen(a);
x=getNum(a,WORDSIZE);
memset(a,'',WORDSIZE);
cin>>a;
lenP=strlen(a);
p=getNum(a,WORDSIZE);

x<<=lenP-1;
intresult=0,i;
for(i=lenA-1;i>=0;i--){
if(x&(1<<(i+lenP-1))){
result=result*2+1;
x^=(p<<i);

}else{
result=result*2;
}
}
showNum(x,lenP-1);

return0;
}

intgetNum(chara[],intn)
{
intk=0;
inti;
for(i=0;i<n&&a[i]!='';i++){
k=k*2+a[i]-'0';
}
returnk;
}

voidshowNum(intr,intn)
{
inti;
for(i=n-1;i>=0;i--){
if(r&(1<<i)){
cout<<1;
}else{
cout<<0;
}
}
cout<<endl;
}

這是以前自己偷懶做計算機網路CRC題目時寫的程序,希望對你有用。

③ 【人民幣酬謝】求易語言crc16校驗和代碼

網上查呀

④ 用C語言實現CRC編碼程序

#include <stdio.h>
#include <string.h>
#include "stdlib.h"
unsigned int char2int(char *str)
{
unsigned int count=0, ret=0;
for(count = 0; count<strlen(str);count++)
{
ret = ret<<1;
if('0' != str[count])
{ ret+=1;}
}
return ret;
}

unsigned int getR(char *str)
{
unsigned int c =0 ;
int ret = strlen(str)-1;
for(c=0;c < strlen(str);c++)
{if(str[c] != '0')<br/> {return ret-c;}
}
}

int getRi(unsigned int num)
{
int c =0;
for(;num != 0; c++)
{num = num>>1;}
return c;
}

void CRC(char *scode, char *p, char*g )
{
unsigned int iP = char2int(p);
unsigned int iG = char2int(g);
unsigned int r= getR(g);
unsigned int code = iP << r;
unsigned int yx = code;
for(;getRi(yx) >= getRi(iG);)
{ yx = yx ^ (iG<<(getRi(yx) - getRi(iG)));}
code += yx;
itoa(code,scode,2);
}

void main() //定義主函數
{
char data[8]="" , bds[8]="",code[16]="";
printf("數據:");
scanf("%s", data);
printf("表達式:");
scanf("%s", bds);
CRC(code,data,bds);
printf("編碼:%s",code);
}

熱點內容
免費的文件夾加密大師 發布:2024-07-23 03:44:44 瀏覽:451
3位密碼鎖密碼是多少 發布:2024-07-23 03:17:55 瀏覽:209
linuxandroid內核版本 發布:2024-07-23 02:37:24 瀏覽:73
緩存模型導出max 發布:2024-07-23 02:20:53 瀏覽:98
android進程回收 發布:2024-07-23 02:20:52 瀏覽:660
數組打亂php 發布:2024-07-23 02:20:52 瀏覽:66
西安php 發布:2024-07-23 02:16:05 瀏覽:213
無冬腳本 發布:2024-07-23 02:16:04 瀏覽:996
方舟伺服器推薦什麼模式 發布:2024-07-23 02:07:17 瀏覽:389
淘寶支付密碼怎麼改 發布:2024-07-23 02:01:37 瀏覽:927