将两个ASCII字节打包到一个ushort中

时间:2013-07-09 17:58:29

标签: c# .net

我需要能够将两个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
    // ????????
}

2 个答案:

答案 0 :(得分:9)

您可以使用left-shift operator将第一个字节向左移8位,然后使用bitwise 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);

答案 1 :(得分:2)

BitConverter class提供了从byte[]转换为多种标准类型的方法,包括ushort。您可以使用BitConverter.ToUInt16直接处理此问题。

ushort value = BitConverter.ToUInt16(asciiBytes, i); // Can pass the index directly

// To "unpack":
byte[] bytes = BitConverter.GetBytes(value);

请注意,这使用系统的字节顺序,可以由BitConverter.IsLittleEndian确定。