根据Jon Skeet's float article,将符号位设置为1,将其他所有设置为0仍将得到数字0。我不确定100%是否将符号位设置为第一位(如本文所述) )或最后一位(如docs中所述)。无论如何,我都尝试过:
byte[] buf = new byte[4];
buf[0] = 0b10000000;
buf[1] = 0b00000000;
buf[2] = 0b00000000;
buf[3] = 0b00000000;
float f = BitConverter.ToSingle(buf, 0); // 1,793662E-43
buf[0] = 0b00000000;
buf[1] = 0b00000000;
buf[2] = 0b00000000;
buf[3] = 0b00000001;
float g = BitConverter.ToSingle(buf, 0); // 2,350989E-38
两者都不都为0。我在做什么错?将所有位设置为0的健全性检查有效。
答案 0 :(得分:1)
由于用户使用EOF,我意识到.NET字节不存储在(对于非位黑客而言)直观的耐力中。 buf[3] = 0b10000000;
可以解决问题。