C语言 带参数的main函数如何循环运行?当按下某一键的时候,就退出,或按下某一键的时候就循环?
按照你的描述的意思,你要实现的功能与main带不带参数无关,具体要看你在main中怎么去实现;
如果你想按某一键退出,只需在你的main函数中想要推出的地方要求外部输入一个字符(你想通过输入这个字符推出),然后做校验,匹配则exit;做循环也是同样的道理。
如果是要在cmd下运行,如果你是用vs/vc等工具编译出来的程序,你只需要cd到你编译出来的程序所在的目录,然后输入可执行程序名称,至于后面带不带参数,根据你的程序需要来定。
谁内帮我解释一下CRC校验C语言实现的原理,原理好像是把2进制每位分别提取出来与或,但程序不懂啥意思?
这里用的多项式为:X16 + X12 + X5 + X0 = 2^0+2^5+2^12+2^16=1 0001 0000 0010 0001=0x11021,因最高位一定为“1”,故略去计算只采用0x1021即可
X5 代表 Bit5,X12 代表 Bit12,1 自然是代表 Bit0,X16 比较特别,是指移位寄存器移出的数据。可以这样理解,与数据位做XOR运算的是上次 CRC值的 Bit15。
你这个实现里的for循环内容,可以理解成移位前 crc 的 Bit15 与数据对应的 Bit(*ptri)做 XOR运算,根据此结果来决定是否执行 crc^=0x1021。只要明白两次异或运算与原值相同,就不难理解这个程序。
if((crc0x8000)!=0) {crc*=2; crc^=0x1021;} /* 余式CRC 乘以2 再求CRC */
if((*ptri)!=0) crc^=0x1021; /* 再加上本位的CRC */
C语言中CRC循环校验的一个程序
while(len–!=0)
这句的len的值循环一次就减少1,先执行len!=0,再执行len–。
当len为0时退出循环。
for(i=0x80;
i!=0;
i/=2)
0x80是十六进制数,也即128
当i!=0时,执行循环体,
然后i=i/2,即i值减半。