Меня немного смущает вопрос о том, почему вы сдвигаете на 16 бит, а не на 8. Теперь я понимаю, почему вам нужен RGB в качестве числа с плавающей запятой (они обычно составляют 1 байт каждый). Но в любом случае.
вы можете использовать 'поддельный' союз, чтобы рассматривать float как uint
[StructLayout(LayoutKind.Explicit)]
public struct FloatIntUnion
{
[FieldOffset(0)]
public float f;
[FieldOffset(0)]
public uint i;
}
это позволяет вам присвоить float
и затем обеспечить выполнение побитовых операций над частью uint
объединения, а затем снова использовать float
в качестве конечного значения.
Однако я бы, наверное, просто использовал:
var bytes = BitConverter.GetBytes (RGB);
if (BitConverter.IsLittleEndian)
Array.Reverse (bytes);
return bytes;
до тех пор, пока производительность не стала проблемой (из-за ЭТОГО метода (сначала прочитайте профиль)).