4个汉字其实就是8个字节,主要是得搞清楚汉字是扩展ascii嘛的取值范围,然后用随机函数生成这个范围的值就OK了。
什么校验方法?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()
}
#include //提供printf函数声明定义#include //提供srand函数声明定义rand
#include //提供time函数
int is_same(int *t,int lo,int x)
int main()
{
int a[10]
int num=20
int t,i
srand(time(0))
//函数提供种即time(0)系统间秒数让rand()函数提供数字每秒都
while(num>0) //循环数
{
for(i=0i<10i++) //获取行10数
{
while(1) //每随机获取数
{
t=rand()%10
if(i==0)
{
a[i]=t
break
}
if(is_same(a,i,t)==0) //必须相同才能获取行数
{
a[i]=t
break
}
}
printf("%d ",t)
}
printf("\n")
num--
}
return 0
}
int is_same(int *t,int lo,int x) //否相同
{
int i
for(i=0i<loi++)
{
if(*(t+i)==x) //相同返真
return 1
}
return 0//否则返假
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)