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

标签 c# types

我有一个正在处理的项目,我需要一种 .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/

相关文章:

Haskell,即使未指定我的类型,我也会收到此错误 : Couldn't match type `a' with `[a]' , `a' 是一个由以下约束的刚性类型变量

java - Type Erasure 抬头,如何规避?

types - Go - math.MaxInt64 和类型推断错误

c - int 如何等于另一个返回 long int 的函数?

java - 什么是 "typing models"?

c# - IEnumerable.Select() 当属性仅在运行时已知时

c# - 找不到 Xamarin Android 资源文件

c# - 尝试对无法访问的网络进行套接字操作

c# - 在Web方法中创建cookie

c# - 从DateTime的列表中找到最高的DateTime