標(biāo)題:
奇偶位計(jì)算請(qǐng)問(wèn)有什么好方法能實(shí)現(xiàn)
[打印本頁(yè)]
作者:
lbq691477940
時(shí)間:
2015-9-30 19:41
標(biāo)題:
奇偶位計(jì)算請(qǐng)問(wèn)有什么好方法能實(shí)現(xiàn)
最近在研究ID卡讀寫(xiě)請(qǐng)問(wèn)有什么好方法能實(shí)現(xiàn)將 五個(gè)字節(jié)的十六進(jìn)制每半個(gè)字節(jié)計(jì)算出其對(duì)應(yīng)的奇偶位,然后將每半個(gè)字節(jié)加奇偶位共 5BIT排列成十行再對(duì)每列奇偶位計(jì)算,
最后在得到的55BIT前面加上 9個(gè)1 共得到 64BIT再每8BIT為一個(gè)字節(jié)分成8個(gè)字節(jié)的十六進(jìn)制數(shù)呢?謝謝!
例子:
//如下為 ID = 3000F94989 轉(zhuǎn)碼過(guò)程
111111111
--->九個(gè)頭
0011 0
3
0000 0
0
---------------------------------------
0000 0
0
0
0
0
0 0 0
------------------------------------------
1111 0
F
1001 0
9
--------------------------------------------------
0100 1
4
1001 0
9
-------------------------------------------------
1000 1
8
1001 0
9
---------------------------------------------
1
0
0
1 0 --->列奇偶位
轉(zhuǎn)換結(jié)果為:0XFF / 0X98 / 0X00 / 0X07 / 0XA4 / 0X99 / 0X46 / 0X52
作者:
lbq691477940
時(shí)間:
2015-10-1 10:29
昨晚我也搞掂了,也是有很多行語(yǔ)句呀
void clqo()//行列奇偶位計(jì)算 并將五個(gè)字節(jié)的十六進(jìn)制轉(zhuǎn)為卡的9個(gè)頭及奇偶位共64位即 八個(gè)字節(jié)的十六進(jìn)制數(shù)據(jù)
{
uchar kk;
for(kk = 0;kk < 5;kk++)//將五個(gè)字節(jié)的十六進(jìn)制分開(kāi)半個(gè)字節(jié)
{
Buf_RF_Data[kk * 2 + 0] = ID_Code[kk] >> 4;
Buf_RF_Data[kk * 2 + 1] = ID_Code[kk] & 0x0F;
}
for(kk = 0;kk < 10;kk++)//計(jì)算每半個(gè)字節(jié)的奇偶位
{
Buf_RF_Data[kk] &= 0x0F; //先屏蔽高4位
if(((Buf_RF_Data[kk] >> 3) + (Buf_RF_Data[kk] >> 2) + (Buf_RF_Data[kk] >> 1) + (Buf_RF_Data[kk] & 0x01)) % 2)
{
Buf_RF_Data[kk] <<= 1;
Buf_RF_Data[kk] |= 1;
}
else //為偶數(shù)個(gè) 1 則補(bǔ) 0
{
Buf_RF_Data[kk] <<= 1;
}
}
for(kk = 4;kk > 0;kk--)//列奇偶位
{
Buf_RF_Data[kk] &= 0x1F; //先屏蔽高3位
if(((Buf_RF_Data[0] >> kk) + (Buf_RF_Data[1] >> kk) + (Buf_RF_Data[2] >> kk) + (Buf_RF_Data[3] >> kk) + (Buf_RF_Data[4] >> kk)
+ (Buf_RF_Data[5] >> kk) + (Buf_RF_Data[6] >> kk) + (Buf_RF_Data[7] >> kk) + (Buf_RF_Data[8] >> kk) + (Buf_RF_Data[9] >> kk)) % 2)
{
Buf_RF_Data[10] |= 1;
Buf_RF_Data[10] <<= 1;
}
else //為偶數(shù)個(gè) 1 則補(bǔ) 0
{
Buf_RF_Data[10] <<= 1;
}
}
Buf_RF_Data[0] <<= 2;
Buf_RF_Data[0] |= 0x80;
Buf_RF_Data[0] |= Buf_RF_Data[1] >> 3;
Buf_RF_Data[1] <<= 5;
Buf_RF_Data[1] |= Buf_RF_Data[2];
Buf_RF_Data[2] <<= 3;
Buf_RF_Data[2] |= Buf_RF_Data[4] >> 2;
Buf_RF_Data[3] = Buf_RF_Data[4] << 6;
Buf_RF_Data[3] |= Buf_RF_Data[5] << 1;
Buf_RF_Data[3] |= Buf_RF_Data[6] >> 4;
Buf_RF_Data[4] = Buf_RF_Data[6] << 4;
Buf_RF_Data[4] |= Buf_RF_Data[7] >> 1;
Buf_RF_Data[5] = Buf_RF_Data[7] << 7;
Buf_RF_Data[5] |= Buf_RF_Data[8] << 2;
Buf_RF_Data[5] |= Buf_RF_Data[9] >> 3;
Buf_RF_Data[6] = Buf_RF_Data[9] << 5;
Buf_RF_Data[6] |= Buf_RF_Data[10];
for(kk = 7;kk > 0;kk--)
{
Buf_RF_Data[kk] = Buf_RF_Data[kk - 1];
}
Buf_RF_Data[0] = 0xFF; //9個(gè)頭中的前8個(gè)1
Buf_RF_Data[8] = Buf_RF_Data[9] = Buf_RF_Data[10] = 0;//這個(gè)可以不清 0
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1