c# 實(shí)現(xiàn)LRC校驗(yàn)碼函數(shù)某命令串為":010200000001FC" 其16進(jìn)制為“3A 30 31 30 32 30 30 30 30 30 30 30 31 46 43 0D 0A”。其中第一個(gè)為起始符,2-13為數(shù)據(jù),14-15即“FC”為L(zhǎng)RC校驗(yàn)碼,有人能寫一個(gè)取得校驗(yàn)位的函數(shù)嗎? 下邊有一段用VC寫的程序 將幀的內(nèi)容,除去頭代碼,用十六進(jìn)制表示,求和,模FF,然后取補(bǔ)碼,以ASCII碼表示即可。 例如:ASCII幀 3A 30 31 30 32 30 30 30 30 30 30 30 31 46 43 0D 0A 將校驗(yàn)內(nèi)容用十六進(jìn)制表示為: 00 01 00 02 00 00 00 00 00 00 00 01 將以上數(shù)值用十六進(jìn)制求和,模FF: 00+01+00+02+00+00+00+00+00+00+00+01=04=0000 0100 取反:1111 1011 加1: 1111 1100 十六進(jìn)制變換:F C ASCII碼:46 43 LRC就是這樣算出來的 這里有一段用C寫的程序,有誰能用DELPHI寫嗎? static unsigned char LRC(auchMsg,usDataLen) unsigned char *auchMsg ; /* 要進(jìn)行計(jì)算的消息 */ unsigned short usDataLen ; /* LRC 要處理的字節(jié)的數(shù)量*/ { unsigned char uchLRC = 0 ; /* LRC 字節(jié)初始化 */ while (usDataLen--) /* 傳送消息 */ uchLRC += *auchMsg++ ; /* 累加*/ return ((unsigned char)(-((char_uchLRC))) ; }
1 回答

犯罪嫌疑人X
TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊
byte[] code = { 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1 };
int sum = 0;
foreach (byte b in code)
{
sum += b;
}
sum =sum % 255;//模FF
sum = ~sum + 1;//取反+1
string lrc = Convert.ToString(sum, 16);
sum最后的結(jié)果是-5,轉(zhuǎn)成16進(jìn)制的字符串是fffffffc,因?yàn)閟um是用int表示的,是32位的。
- 1 回答
- 0 關(guān)注
- 119 瀏覽
添加回答
舉報(bào)
0/150
提交
取消