无法重新创建客户端提供的CheckSum结果

时间:2017-04-27 04:58:38

标签: c# checksum

我有一个客户端给了我以下测试数据字符串:

  

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)。我需要能够按照这些规则自己到达这个值:

  1. 初始结果变量为0
  2. 依次考虑每条记录(包括标题,但不包括页脚)
  3. 将每条记录分成四个字节(字符)部分(不包括行字符的结尾),如果需要填充空值,并将它们异或(XOR)到结果变量中。
  4. 客户端提供类似伪代码:

    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;
    }
    

    不幸的是我的结果总是关闭。读取整个字符串或读取每个记录(行)然后将它们相加。

    我很感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

问题在于客户端提供过时的文件。 代码工作正常。