C# 使用反射得到的对象值,BitConverter给出奇怪的结果

C# 使用反射得到的对象值,BitConverter给出奇怪的结果,c#,C#,所以我得到一个值作为 var info = item.GetType().GetProperty(p.Key); var value = info.GetValue(item); 值为double且等于0,即value.GetType.Name为double且doublevalue==0为true 但当我执行BitConverter.GetBytesdoublevalue时,我得到 [0]: 0 [1]: 0 [2]: 0 [3]: 0 [4]: 0 [5]: 0 [6]: 0 [7]: 12

所以我得到一个值作为

var info = item.GetType().GetProperty(p.Key);
var value = info.GetValue(item);
值为double且等于0,即value.GetType.Name为double且doublevalue==0为true

但当我执行BitConverter.GetBytesdoublevalue时,我得到

[0]: 0
[1]: 0
[2]: 0
[3]: 0
[4]: 0
[5]: 0
[6]: 0
[7]: 128
128???那128人在这里干什么?如何获得所有0的应有状态

那128人在这里干什么


对于问题的第一部分:IEEE 754浮点数定义零相等,表示0可以是正的或负的。但是,+0和-0的存储布局不同

如何获得所有0的应有状态

如果代码将产生-0的值,它需要序列化存储布局,+0和-0需要规范化,那么最好的方法是在调用BitConverter.GetBytesdouble之前检查double的值

中提到了几种方法

在简单情况下,假设0应为+0:

var info = item.GetType().GetProperty(p.Key);
var value = info.GetValue(item);
var normalized = (double) value;

if (normalized == 0.0)
{
    normalized = 0.0;
}

var bytes = BitConverter.GetBytes(normalized);

IEEE 754浮点数有两种表示形式:0:+0和-0。您将看到位转换器。GetBytes-0.0生成相同的布局。@Romoku我知道这是一个答案