将二进制数据转换为2的补码,然后放入输出数组
本文关键字:然后 数组 输出 补码 数据 二进制 转换 | 更新日期: 2023-09-27 18:24:09
场景:
我有二进制数据。我的要求是,我需要一个按以下顺序包含的字节输出数组:
- 按顺序读取每2个字节
- 然后转换为2的补码
- 然后放置到输出阵列中
请帮帮我。
假设问题中的二进制数据实际上是数组:
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"))));