将两个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
    // ????????
}

将两个ASCII字节打包到一个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.

确定