當前位置:首頁 » 編程語言 » 校驗位c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

校驗位c語言

發布時間: 2022-10-01 04:51:00

1. 如何用c語言實現驗證碼的校驗

什麼校驗方法?
CRC檢驗如下:

#include<stdio.h>

int binaryToDec(char *str)
{
unsigned n=0;
while(*str!='\0')
{
if(*str<'0'||*str>'9')return -1;
n=n*2+(*str-'0');
str++;
}
return n;
}

void printBinary(int n)
{
if(n>1)printBinary(n/2);
printf("%d",n%2);
}

void main()
{
unsigned n,m,CRC=0x1A8000,fD=0x100000;
char CRC16[32];

while(1)
{
printf("輸入16位校驗碼:");
gets(CRC16);
n=binaryToDec(CRC16);
if(n>65535)
printf("輸入值過長,請重新輸入\n");
else break;
}

n<<=5;//n左移5位
m=n;//m等於n
while(fD>0x20)
{
while( !(m&fD) && !(CRC&1) )//保證被除數第一位為1
{
CRC>>=1;//除數右移一位
fD>>=1;//被除數首位的標志位右移一位
}
m=m^CRC;//被除數與除數相異或
}
n+=m;//模二餘數相加

printf("輸出21位校驗碼:");
printBinary(n);
printf("\n");

getchar();
}

2. 求能實現奇偶校驗的c語言程序86

奇偶校驗數據是一種簡單的數據校驗方法,顧名思義就知道有兩種方式:奇校驗和偶校驗。

因為計算機裡面的數據形式都是通過1 和 0來存儲和傳輸的,那麼就可以通過檢驗一個數據串的1 的個數來判斷這個數據串是否出錯。

假如傳輸方傳輸的數據有奇數個1 而接收方有偶數個1 那麼數據肯定出錯,就可以要求對方再傳送一遍。
而怎麼標志傳送的數據有多少個1 呢?一般的做法是在數據串的最後一位補上一個奇偶校驗位,如果有奇數個1 這個校驗位是1 則叫奇校驗,否則叫偶校驗。

好了,說完了。希望能解決你的問題。fld希望採納我的

3. 51單片機中C語言奇偶校驗位如何設置

MOV
A,
#待發數據
;數據進了A,即刻生成校驗位P
MOV
C,
P
MOV
TB8,
C
;校驗位送到TB8
MOV
SBUF,
A
;發送數據,以及P
上述寫法,是偶校驗。奇校驗,需要增加一條取反指令,如下:
MOV
C,
P
CPL
C
MOV
TB8,
C
;校驗位送到TB8

4. 51單片機中C語言奇偶校驗位如何設置

MOV A, #待發數據 ;數據進了A,即刻生成校驗位P
MOV C, P
MOV TB8, C ;校驗位送到TB8
MOV SBUF, A ;發送數據,以及P

上述寫法,是偶校驗。奇校驗,需要增加一條取反指令,如下:

MOV C, P
CPL C
MOV TB8, C ;校驗位送到TB8

5. 用c語言編寫函數,實現「計算商品條形碼校驗位


驗證演算法

6. C語言編程 字元的奇校驗碼

c語言的字元類型是以整數的形式存儲在內存中的,這個整數就是這個字元的ascii碼,所以只需要將字元以整數的形式輸出即可。
代碼如下:
#include
int main()
{
char c;
c = getchar();
printf("%d\n", c);
return 0;
}

7. C語言編程:13位書號校驗碼的計算方法

#include<stdio.h>
voidmain()
{
charisbn[13];
inta=0,b=0,c,d,e,i;
scanf("%s",isbn);
for(i=0;i<12;i+=2)
a+=(isbn[i]-48);//-48是為了把字元「0~9」轉換成數字0~9
for(i=1;i<12;i+=2)
b+=(3*(isbn[i]-48));
c=a+b;printf("%d ",c);
d=c%10;printf("%d ",d);
e=10-d;
printf("%d",e);//這就是計算效驗碼
}

之前的版本有一些錯誤 現在改好呃

8. 如何用C語言判斷一個校驗和是否超過8位

放在一個無符4位元組整數里 大於了255說明超過了8位 這時把整數與上ox000000FF就去掉高位了

9. crc16校驗的c語言程序

下面我們以CRC-16為例來說明任意長度數據流的CRC校驗碼生成過程。我們採用將數據流分成若干個8bit字元,並由低位元組到高位元組傳送的並行方法來求CRC校驗碼。具體計算過程為:用一個16bit的寄存器來存放CRC校驗值,且設定其初值為0x0000;將數據流的第一個8bit與16bit的CRC寄存器的高位元組相異或,並將結果存入CRC寄存器高位元組;CRC寄存器左移一位,最低1bit補零,同時檢查移出的最高1bit,若移出的最高1bit為0,則繼續按上述過程左移,若最高1bit為1,則將CRC寄存器中的值與生成多項式碼相異或,結果存入CRC寄存器值;繼續左移並重復上述處理方法,直到將8bit數據處理完為止,則此時CRC寄存器中的值就是第一個8bit數據對應的CRC校驗碼;然後將此時CRC寄存器的值作為初值,用同樣的處理方法重復上述步驟來處理下一個8bit數據流,直到將所有的8bit字元都處理完後,此刻CRC寄存器中的值即為整個數據流對應的CRC校驗碼。
下面示出了其計算過程的流程圖:

在用C語言編寫CRC校驗碼的實現程序時我們應該注意,生成多項式 對應的十六進制數為0x18005,由於CRC寄存器左移過程中,移出的最高位為1時與 相異或,所以與16bit的CRC寄存器對應的生成多項式的十六進制數可用0x8005表示。下面給出並行處理8bit數據流的C源程序:
unsigned short crc_dsp(unsigned short reg, unsigned char data_crc)
//reg為crc寄存器, data_crc為將要處理的8bit數據流
{
unsigned short msb; //crc寄存器將移出的最高1bit
unsigned short data;
unsigned short gx = 0x8005, i = 0; //i為左移次數, gx為生成多項式

data = (unsigned short)data_crc;
data = data << 8;
reg = reg ^ data;
do
{
msb = reg & 0x8000;
reg = reg << 1;
if(msb == 0x8000)
{
reg = reg ^ gx;
}
i++;
}
while(i < 8);
return (reg);
}
以上為處理每一個8bit數據流的子程序,在計算整個數據流的CRC校驗碼時,我們只需將CRC_reg的初值置為0x0000,求第一個8bit的CRC值,之後,即可將上次求得的CRC值和本次將要處理的8bit數據作為函數實參傳遞給上述子程序的形參進行處理即可,最終返回的reg值便是我們所想得到的整個數據流的CRC校驗值。

10. 51單片機中C語言奇偶校驗位如何設置

在51單片機中,只要將一個值傳送給累加器,這個數的奇偶校驗值就會影響P。一般而言,在串列通訊中為確保傳輸數的准確,用到校驗位的情況比較多。以下是程序代碼:

#include<reg51.h>

main()
{
char dat;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0xd0;
while(1)
{
dat++;
ACC=dat;
TB8=P; //校驗位送第九數據位TB8
SBUF=ACC;
while(TI==0);
TI=0;
}
}