JT/T808组包的最重要一个环节之一就是对整个包(除去包头包尾的0x7E)内容按字节异或求和。
C# 实现 public int getXorCode(byte[] data)
{
byte CheckCode = 0;
int len = data.Length;
for (int i = 0; i < len; i++)
{
CheckCode ^= data[i];
}
return CheckCode;
}
传入参数为byte[]
Java 实现 public int getXorCode(ByteBuf buf) {
int checksum = 0;
while (buf.readableBytes() > 0) {
checksum ^= buf.readUnsignedByte();
}
return checksum;
}
传入的是ByteBuf,基于的是Netty框架
如果想传入的也是byte[],则如下:
public static int getXorCode(byte[] bytes) {
int checksum = 0;
for (byte b : bytes) {
checksum ^= b;
}
return checksum;
}