将两个ASCII字节打包到一个ushort中
本文关键字:一个 ushort 字节 两个 ASCII | 更新日期: 2023-09-27 18:21:38
我需要能够将两个ASCII字节打包到一个ushort中。我怎样才能做到这一点?
到目前为止,我有:
for (var i = 0; i < asciiBytes.Length; i += 2)
{
// Get two bytes from an ASCII byte array.
var sub = new[] { asciiBytes[i], asciiBytes[i + 1] };
// Pack the two bytes into a ushort
// ????????
}
您可以使用左移运算符将第一个字节左移8位,然后使用逐位OR将其与第二个字节组合。
ushort x = (ushort)((asciiBytes[i] << 8) | asciiBytes[i + 1]);
这在算术上等同于(但比):
ushort x = (ushort)(asciiBytes[i] * 256 + asciiBytes[i + 1]);
编辑:反向操作为:
byte b1 = (byte)(x >> 8);
byte b2 = (byte)(x & 255);
BitConverter类提供了从byte[]
到许多标准类型(包括ushort
)的转换方法。您可以使用BitConverter.ToUInt16直接处理此问题。
ushort value = BitConverter.ToUInt16(asciiBytes, i); // Can pass the index directly
// To "unpack":
byte[] bytes = BitConverter.GetBytes(value);
请注意,这使用了系统的字节顺序,可以由BitConverter.IsLittleEndian.