数据是12345 得到的校验位好像是2吧
接口文档中校验位一页如下:LRC calculation example
The following diagram demonstrates an LRC calculation (the data is '12345'):
bit 7 6 5 4 3 2 1 0<STX> 0 0 0 0 0 0 1 0 unusedLRC 0 0 0 0 0 0 0 0 seed
Byte 1 0 0 1 1 0 0 0 1 '1'
LRC 0 0 1 1 0 0 0 1
Byte 2 0 0 1 1 0 0 1 0 '2' LRC 0 0 0 0 0 0 1 1
Byte3 0 0 1 1 0 0 1 1 '3'LRC 0 0 1 1 0 0 0 0
Byte4 0 0 1 1 0 1 0 0 '4'LRC 0 0 0 0 0 1 0 0
Byte5 0 0 1 1 0 1 0 1 '5'LRC 0 0 1 1 0 0 0 1
<ETX> 0 0 0 0 0 0 1 1
LRC 0 0 1 1 0 0 1 0 ‘2’ = transmitted LRC
<STX>12345<ETX>2
希望高手指点,万分感激!!!!!
接口文档中校验位一页如下:LRC calculation example
The following diagram demonstrates an LRC calculation (the data is '12345'):
bit 7 6 5 4 3 2 1 0<STX> 0 0 0 0 0 0 1 0 unusedLRC 0 0 0 0 0 0 0 0 seed
Byte 1 0 0 1 1 0 0 0 1 '1'
LRC 0 0 1 1 0 0 0 1
Byte 2 0 0 1 1 0 0 1 0 '2' LRC 0 0 0 0 0 0 1 1
Byte3 0 0 1 1 0 0 1 1 '3'LRC 0 0 1 1 0 0 0 0
Byte4 0 0 1 1 0 1 0 0 '4'LRC 0 0 0 0 0 1 0 0
Byte5 0 0 1 1 0 1 0 1 '5'LRC 0 0 1 1 0 0 0 1
<ETX> 0 0 0 0 0 0 1 1
LRC 0 0 1 1 0 0 1 0 ‘2’ = transmitted LRC
<STX>12345<ETX>2
希望高手指点,万分感激!!!!!
Byte 1 0 0 1 1 0 0 0 1 '1'Byte 2 0 0 1 1 0 0 1 0 '2'
Byte3 0 0 1 1 0 0 1 1 '3'
Byte4 0 0 1 1 0 1 0 0 '4'
Byte5 0 0 1 1 0 1 0 1 '5'这个你要先理解,1表示成16进制,就是0x31也就是0011 0001
LRC 0 0 0 0 0 0 0 0 seed
Byte 1 0 0 1 1 0 0 0 1 '1'
LRC 0 0 1 1 0 0 0 1做二进制的或运行,得到新的LRC是 00110001
Byte 2 0 0 1 1 0 0 1 0 '2' LRC 0 0 0 0 0 0 1 1然后再将新的LRC
0 0 1 1 0 0 0 1跟第二个数字字节码
0 0 1 1 0 0 1 0
做同样的运算得到新的LRC,这样一直计算到最后一个数字,你明白了吧!
初始效验码是0
第一步与'1'异或:
LRC 0 0 0 0 0 0 0 0 seed 初始校验码
Byte 1 0 0 1 1 0 0 0 1 '1' 算出校验码为
LRC 0 0 1 1 0 0 0 1
然后与'2'异或:
Byte 2 0 0 1 1 0 0 1 0 '2'
算出效验码为:
LRC 0 0 0 0 0 0 1 1
....
依次类推
<STX> 0 0 0 0 0 0 1 0 unusedLRC 0 0 0 0 0 0 0 0 seed <==种子为0,
Byte 1 0 0 1 1 0 0 0 1 '1' <==第一个数字1 为 00110001
LRC 0 0 1 1 0 0 0 1 <==异或运算后得到LRC 为0011 0001
Byte 2 0 0 1 1 0 0 1 0 '2' <==第二个数字2 为 00110010
LRC 0 0 0 0 0 0 1 1 <==与上次生成的LRC做异或运算,得到新的LRC
Byte3 0 0 1 1 0 0 1 1 '3'LRC 0 0 1 1 0 0 0 0
Byte4 0 0 1 1 0 1 0 0 '4'LRC 0 0 0 0 0 1 0 0
Byte5 0 0 1 1 0 1 0 1 '5'LRC 0 0 1 1 0 0 0 1
<ETX> 0 0 0 0 0 0 1 1
LRC 0 0 1 1 0 0 1 0 ‘2’ = transmitted LRC
byte[] bytes = Encoding.ASCII.GetBytes("12345\x3"); // <ETX> = \x3int checksum = 0;
foreach (byte b in bytes)
{
checksum ^= b; // <--
}char checksumChar = (char)checksum; // '2'
http://topic.csdn.net/u/20100609/14/8766edfd-a580-4d4f-aada-3f6bb1c8de66.html?74884