我有一个正在处理的项目,我需要一种 .NET BCL 中不存在的数据类型 - Unsigned Int24。对于我正在进行的计算,int32 中的第 4 个字节,即使设置为全零,也会搞砸我的结果。
编辑: 我在限制为仅 24 位的 24 位整数空间上进行按位循环移位。如果在 32 位数字上以 24 位级别执行旋转,则结果会非常不正确。
有谁知道这种数据类型的第三方实现可用吗?
谢谢!
最佳答案
实现 Int24 并不难(老实说!)。但是我们需要更多地了解您为什么需要实现它。 @nneonneo 想知道您是否正在尝试与使用 24 位整数的 native 库交互。如果是这种情况,那么您可以通过执行以下操作来完成:
[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) & 0xFF );
_b2 = (byte)( (value >> 16) & 0xFF );
}
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 );
为大端或签名的 Int24 修改类是留给读者的练习。
关于c# - C# 中是否有任何 Int24 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12549197/