C# 无法重新创建客户端提供的校验和结果
我有一个客户给了我以下测试数据字符串: AAA | E0071001 | D | 200904010101 | EC | UKDC | BP |********1 | TR01 |C# 无法重新创建客户端提供的校验和结果,c#,checksum,C#,Checksum,我有一个客户给了我以下测试数据字符串: AAA | E0071001 | D | 200904010101 | EC | UKDC | BP |********1 | TR01 | CPD | AAA123 |测试参与者A123 | P | BBB456 |新参与者B456 | P | ER2 | NAH1 |测试参与者| 20090401 | | | EAD | 7 | | | ZZZ | 5 | 474617386 | 第一行被视为页眉数据(以AAA开头),最后一行被视为页脚(ZZZ)。其余
CPD | AAA123 |测试参与者A123 | P | BBB456 |新参与者B456 | P |
ER2 | NAH1 |测试参与者| 20090401 | | |
EAD | 7 | | |
ZZZ | 5 | 474617386 |
第一行被视为页眉数据(以AAA开头),最后一行被视为页脚(ZZZ)。其余部分是主体(以CPD、ER2、EAD开头的行) 页脚包含一个校验和值(此处:474617386)。我自己需要能够按照以下规则获得此值:
num_chars = strlen (record_buffer)
FOR (i = 0;i < num_chars;)
value = 0
FOR (j = 0; j < 4; i++, j++)
IF i < num_chars
value = ((value << 8 ) + record_buffer[i])
ELSE
value = value << 8
END IF
ENDFOR
result = result XOR value
ENDFOR
num\u chars=strlen(记录缓冲区)
对于(i=0;i value=((value问题在于客户端提供了过时的文件。
代码运行得很好。您是否尝试过用计算器手工操作并验证结果?您使用的记录缓冲区是什么?@DesertFox-我尝试过以下方法:1.由上面的前4行组成的单个字符串(不包括行尾)2.每一行都被视为记录缓冲区。在前4行重复此操作。n将4个结果值相加。这两个操作都不起作用。
var result = 0;
var num_chars = record_buffer.Length;
for (int i = 0; i < num_chars;)
{
var value = 0;
for (int j = 0; j < 4;i++, j++)
{
if (i < num_chars)
value = ((value << 8) + record_buffer[i]);
else
value = value << 8;
}
result = result ^ value;
}