使用校验和的分组数据?
Packet data using the checksum?
我有数据包,我将其存储为 public static List<byte> packet = new List<byte>();
这个的最后一个字节是校验和,我正在想办法用它来检查数据包数据。
当我有一个完整的数据包时,我 运行:
//get checksum
byte chcksm = packet[packet.Count - 1];
int sum = chcksm;
获取校验和字节的值。
那我运行:
//checksum calculation
public static byte ComputeAdditionChecksum(List<byte> data)
{
byte sum = 0;
unchecked // Let overflow occur without exceptions
{
foreach (byte b in data)
{
sum += b;
}
}
return sum;
}
on packet
获取整个数据包的值,并将其保存在一个名为 packetSum
.
的 int 中
比较这两个值,在一个测试数据包上,packetSum
,整个数据包的值,returns 76
。而校验字节的值returns103.
我做错了吗?
//编辑,在文档中,它说了关于校验和的内容..
1字节校验和表示为:
unsigned char CalcChkSum(unsigned char *MsgBlock,
int Length)
{
unsigned char Total = 0x40;
int i;
for (i = 0; i < Length-1; i++)
{
Total -= MsgBlock[i];
}
return Total;
}
您似乎在计算中包含了校验和。在没有看到具有预期和实际结果的基础数据的情况下,我会说按如下方式更改循环应该可以解决问题:
public static byte ComputeAdditionChecksum(List<byte> data)
{
byte sum = 0x40;
unchecked // Let overflow occur without exceptions
{
for (var i = 0; i < data.Count - 1; i++)
{
sum -= data[i];
}
}
return sum;
}
我有数据包,我将其存储为 public static List<byte> packet = new List<byte>();
这个的最后一个字节是校验和,我正在想办法用它来检查数据包数据。
当我有一个完整的数据包时,我 运行:
//get checksum
byte chcksm = packet[packet.Count - 1];
int sum = chcksm;
获取校验和字节的值。
那我运行:
//checksum calculation
public static byte ComputeAdditionChecksum(List<byte> data)
{
byte sum = 0;
unchecked // Let overflow occur without exceptions
{
foreach (byte b in data)
{
sum += b;
}
}
return sum;
}
on packet
获取整个数据包的值,并将其保存在一个名为 packetSum
.
比较这两个值,在一个测试数据包上,packetSum
,整个数据包的值,returns 76
。而校验字节的值returns103.
我做错了吗?
//编辑,在文档中,它说了关于校验和的内容..
1字节校验和表示为:
unsigned char CalcChkSum(unsigned char *MsgBlock,
int Length)
{
unsigned char Total = 0x40;
int i;
for (i = 0; i < Length-1; i++)
{
Total -= MsgBlock[i];
}
return Total;
}
您似乎在计算中包含了校验和。在没有看到具有预期和实际结果的基础数据的情况下,我会说按如下方式更改循环应该可以解决问题:
public static byte ComputeAdditionChecksum(List<byte> data)
{
byte sum = 0x40;
unchecked // Let overflow occur without exceptions
{
for (var i = 0; i < data.Count - 1; i++)
{
sum -= data[i];
}
}
return sum;
}