C #: ручное преобразование битов? - PullRequest
1 голос
/ 16 октября 2010

Есть ли лучший способ написать это, чем использовать 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 Ответ

3 голосов
/ 16 октября 2010

Я бы использовал:

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

Будьте осторожны с порядком байтов: этот код работает только с 24-битными числами с прямым порядком байтов.

С другой стороны, BitConverter использует собственную последовательность.Так что вы не сможете работать на всех системах с прямым порядком байтов.

...