C#:手动位转换?

时间:2010-10-15 21:51:23

标签: c# byte bits

有没有比使用BitConverter更好的方式来写这个?

public static class ByteArrayExtensions
{

    public static int IntFromUInt24(this byte[] bytes)
    {
        if (bytes == null)
        {
            throw new ArgumentNullException();
        }

        if (bytes.Length != 3)
        {
            throw new ArgumentOutOfRangeException
                ("bytes", "Must have length of three.");
        }

        return BitConverter.ToInt32
                    (new byte[] { bytes[0], bytes[1], bytes[2], 0 }, 0);
    }

}

1 个答案:

答案 0 :(得分:3)

我会用:

return bytes[2]<<16|bytes[1]<<8|bytes[0];

注意字节顺序:此代码仅适用于小端24位数字。

另一方面,

BitConverter使用本机字节序。所以你的能力不适用于所有大端系统。