将二进制数据转换为 2 的补码,然后放入输出数组

Convert binary data to 2’s complement and then place in output array

场景:

我有二进制数据。我的要求是我需要一个按以下顺序包含的字节输出数组:

请帮帮我。

假设问题中的二进制数据实际上是一个数组:

  Byte[] binaryData = new Byte[] {
    0x12, 0x13, 0x14, 0x15
  };

  Byte[] result = Enumerable
    .Range(0, binaryData.Length / 2)
    .Select(index => unchecked(BitConverter.ToInt16(binaryData, index * 2)))
    //.Select(item => (Int16) unchecked((item << 8) | (item >> 8))) // if you want to swap the endians
    .Select(value => (Int16) unchecked(~value + 1))
    .SelectMany(value => unchecked(new Byte[] {(Byte) (value >> 8), (Byte) (value & 0xFF)}))
    .ToArray();

  // Test
  // "ec, ee, ea, ec"
  // ("ed, ed, eb, eb" when endians are swapped)
  Console.Write(String.Join(", ", result.Select(item => item.ToString("x2"))));

编辑:以防(见评论)每个字节(不是2字节字) 应更改为:

Byte[] binaryData = new Byte[] {
   224, 46
};

Byte[] result = binaryData
  .Select(b => unchecked((Byte) (~b + 1)))
  .ToArray();

// "20 D2"
Console.Write(String.Join(", ", result.Select(item => item.ToString("x2"))));