我有一个客户端给了我以下测试数据字符串:
AAA | E0071001 | d | 20090401010101 | EC | UKDC | BP | ******** | 1 | TR01 |
CPD | AAA123 |测试参与者A123 | P | BBB456 |新参与者B456 | P |
ER2 | NAHNAH1 |测试参与者| 20090401 ||
EAD | 7个|||
ZZZ | 5 | 474617386 |
第一行被认为是标题数据(以AAA开头),最后一行被认为是页脚(ZZZ)。其余的是身体(以CPD,ER2,EAD开头的行)
页脚包含checkSum值(此处: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
我以为我可以将此直接转换为C#,执行以下操作:
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;
}
不幸的是我的结果总是关闭。读取整个字符串或读取每个记录(行)然后将它们相加。
我很感谢你的帮助。
答案 0 :(得分:0)
问题在于客户端提供过时的文件。 代码工作正常。