在C#中是否有任何Int24实现?

我正在处理一个项目,我需要一个.NET BCL中不存在的数据类型 – 一个Unsigned Int24。 对于我正在进行的计算,int32中的第4个字节,即使设置为全零,也会搞砸我的结果。

编辑:我在24位整数空间上进行逐位循环移位,仅限于24位。 如果在32位数字上以24位执行旋转,则结果非常不正确。

有谁知道这种数据类型的任何第三方实现可用吗?

谢谢!

实现Int24并不难(诚实!)。 但我们需要更多地了解您需要实现它的原因。 @nneonneo想知道您是否尝试与使用24位整数的本机库进行交互。 如果是这种情况那么你可以做这样的事情:

 [StructLayout(LayoutKind.Sequential)] public struct UInt24 { private Byte _b0; private Byte _b1; private Byte _b2; public UInt24(UInt32 value) { _b0 = (byte)(value & 0xFF); _b1 = (byte)(value >> 8); _b2 = (byte)(value >> 16); } public unsafe Byte* Byte0 { get { return &_b0; } } public UInt32 Value { get { return _b0 | ( _b1 << 8 ) | ( _b2 << 16 ); } } } // Usage: [DllImport("foo.dll")] public static unsafe void SomeImportedFunction(byte* uint24Value); UInt24 uint24 = new UInt24( 123 ); SomeImportedFunction( uint24.Byte0 ); 

修改big-endian或签名Int24的类是一个留给读者的练习。