为了方便使用System.Double ( float64) 类型的数字,我想描述一个类似的结构:
// cpp code
union float64
{
double x;
struct
{
unsigned long long mant : 52;
unsigned long long exp : 11;
unsigned long long sign : 1;
};
float64(double val) { x = val; }
};
float64 f = -4.0;
// f.mant == 0
// f.exp == 1025 (- 1023 == 2)
// f.sign == 1
换句话说,我需要由IEC 60559:1989 (IEEE 754) 标准描述的浮点数的底线,可以快速访问
这C++很容易用位域来表示。但是C#,我无法弄清楚如何(优雅地)执行此操作:MarshalAsAttribute.SizeConst的使用仅对字符串和数组有效
所以到目前为止我看到的唯一选择是使用fixed-fields,然后我需要的数字将从中加载。但是这个解决方案对我来说似乎有点麻烦......
是否可以使用 C# 指定特定大小的位域,如果可以,如何执行此操作?
https://ideone.com/wGW2qq
另一个允许您在不安全的情况下进行操作的选项
[StructLayout(LayoutKind.Explicit)]是:其余代码与@Qwertiy 的答案相同。