我正在替换一些用C++(NET6)编写二进制文件的C++代码,我注意到写入文件的值之间的差异.
如果我的双精度值等于0,C++将字节写入:
00 00 00 00 00 00 00 00
但是C#(使用BinaryWriter)写入的值与:
00 00 00 00 00 00 00 80
个
如果我使用系统将0.0转换为字节.比特转换器.GetBytes(),我得到所有0x00.如果我使用位转换器将带有0x80的字节转换为双精度字节,它仍然会给我0.0.
byte[] zero = System.BitConverter.GetBytes(0.0); // 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
bool equal = 0.0 == System.BitConverter.ToDouble(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}); // true
这看起来不会造成任何问题,但我想知道发生了什么事.