【问题标题】:C# BIG Endian Format for long value长值的 C# BIG Endian 格式
【发布时间】:2019-02-23 09:10:29
【问题描述】:

我正在尝试针对我的规范执行以下操作:

字节数为 N 的销售计数器从 BIG 中的字节 0 开始 ENDIAN 格式存储为二进制补码表示(“有符号”)。 N对应 编码销售计数器所需的字节数。必须 收入计数器至少使用 5 个字节/40 位。

为此,我在 C# 中创建了以下代码

private static byte[] EncodeUmsatz(long umsatz)
{
    // This gives an 8-byte array
    byte[] umsatzBytes = BitConverter.GetBytes(umsatz);
    // Pad with zeroes to get 16 bytes
    int length = 16 * ((umsatzBytes.Length + 15) / 16);
    Array.Resize(ref umsatzBytes, length);
    // reverse to get big-endian array
    Array.Reverse(umsatzBytes, 0, umsatzBytes.Length);
    return umsatzBytes;
}

BitConverter 的属性IsLittleEndian 为假。所以这应该是对的,或者?

但是使用外部工具的测试说

“计算的销售计数器与加密的销售计数器不匹配(参见 DECRYPTED_TURNOVER_VALUE 参数),请检查销售计数器编码(BIG endian,二进制补码)或使用的 AES 密钥。”

如果我的代码进行二进制补码表示,我不知道什么?

我不是字节专家,所以有人知道我可以尝试什么

【问题讨论】:

    标签: c# byte endianness bitconverter


    【解决方案1】:

    所以问题解决了——c#代码对于大端是正确的——问题是输入参数的值是错误的

    【讨论】:

      猜你喜欢
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      • 2016-01-03
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 2022-06-10
      相关资源
      最近更新 更多