3,881
社区成员
发帖
与我相关
我的任务
分享
unsigned int gen_crc(BYTE far *frame, short frame_len)
{
BYTE c, treat, bcrc;
unsigned int wcrc = 0;
short i, j;
for (i = 0; i < frame_len; i++)
{
c = frame[i];
for (j = 0; j < 8; j++)
{
treat = c & 0x80;
c <<= 1;
bcrc = (wcrc >> 8) & 0x80;
wcrc <<= 1;
if (treat != bcrc)
wcrc ^= 0x1021;
}
}
return wcrc;
}
#include <vector>
#include <stdio.h>
unsigned int gen_crc(const unsigned char *frame, short frame_len)
{
unsigned char c, treat, bcrc;
unsigned int wcrc = 0;
short i, j;
for (i = 0; i < frame_len; i++)
{
c = frame[i];
for (j = 0; j < 8; j++)
{
treat = c & 0x80;
c <<= 1;
bcrc = (wcrc >> 8) & 0x80;
wcrc <<= 1;
if (treat != bcrc)
wcrc ^= 0x1021;
}
}
return wcrc;
}
unsigned int gen_crcbit(const unsigned char *frame, short frame_len)
{
std::vector<unsigned char> vec_bits;
for (int i=0;i<frame_len*8;++i)
vec_bits.push_back((frame[i/8]>>(7-i%8))&0x01);
for (int i=0;i<16;++i)
vec_bits.push_back(0);
const unsigned char poly[17] = {1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1};
for (int j=0;j<vec_bits.size();++j)
if (vec_bits[j])
putchar('1');
else
putchar('0');
for (int i=0;i<frame_len*8;++i)
{
if (vec_bits[i])
{
for (int j=0;j<17;++j)
vec_bits[i+j] = vec_bits[i+j]==poly[j]?0:1;
}
else
continue;
printf("\n");
for (int j=0;j<i;++j)
putchar(' ');
for (int j=0;j<17;++j)
putchar(poly[j]==0?'0':'1');
printf("\n");
bool bhit1 = false;
for (int j=0;j<frame_len*8+16;++j)
if (vec_bits[j])
{
putchar('1');
bhit1 = true;
}
else if (bhit1)
putchar('0');
else
putchar(' ');
}
int cc = 0;
for (int j=0;j<16;++j)
{
cc<<=1;
cc += vec_bits[frame_len*8+j];
}
return cc;
}
int main(int argc, char *argv[])
{
const unsigned char pp[] = {0x30,0x31,0x30,0x31,0x32,0x39};
unsigned int crc1 = gen_crcbit(pp,6);
printf ("\n%04x\n",crc1);
crc1 = gen_crc(pp,6);
printf ("\n%04x\n",crc1 & 0x0ffff);
return 0;
}
0011000000110001001100000011000100110010001110010000000000000000
10001000000100001
1001000110101000100000011000100110010001110010000000000000000
10001000000100001
1100110111000000000011000100110010001110010000000000000000
10001000000100001
100010111010000100011000100110010001110010000000000000000
10001000000100001
111011000110011000100110010001110010000000000000000
10001000000100001
11001000111011010100110010001110010000000000000000
10001000000100001
1000000111111011100110010001110010000000000000000
10001000000100001
100111101011000110010001110010000000000000000
10001000000100001
101101010000100010001110010000000000000000
10001000000100001
1111010001100000001110010000000000000000
10001000000100001
111110001110000101110010000000000000000
10001000000100001
11100001111000111110010000000000000000
10001000000100001
1101001111100110110010000000000000000
10001000000100001
101101111110110010010000000000000000
10001000000100001
1111111111110000010000000000000000
10001000000100001
111011111100000110000000000000000
10001000000100001
11001111101000100000000000000000
10001000000100001
1000111101100101000000000000000
10001000000100001
11101110101100000000000000
10001000000100001
1100110101000001000000000
10001000000100001
100010101010001100000000
10001000000100001
101011001110000000
10001000000100001
1001001111000010
93c2
93c2