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

犯罪嫌疑人X
TA貢獻2080條經(jīng)驗 獲得超4個贊
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進制的字符串是fffffffc,因為sum是用int表示的,是32位的。
- 1 回答
- 0 關(guān)注
- 106 瀏覽
添加回答
舉報
0/150
提交
取消