gpt4 book ai didi

c# - 在 C# 中从二进制值转换为 double 值时出错

转载 作者:行者123 更新时间:2023-11-30 14:21:14 24 4
gpt4 key购买 nike

我正在尝试读取由 c++ 程序生成的二进制文件。此文件有一些 double 数字,当我尝试读取它们时,我得到了一个错误 double 值。

这是从文件中读取的十六进制值:

00-67-CC-02-B3-F7-40-CA

预期值:

0.2051076530529798

实际值:

-4.9596277989715114E+49

二进制文件类型:double 8 byte (c++)

c#中的转换输出:double (binaryreader.ReadDouble())

这是代码:

reader = new BinaryReader(File.Open(path, FileMode.Open), Encoding.Default);

double value = reader.ReadDouble();

我已经检查过了,我在正确的位置使用了这个命令。为什么我有这个不同的值

最佳答案

让我们看一下用 byte 表示的 expected:

double expected = 0.2051076530529798;

string result = string.Join("-", BitConverter
.GetBytes(expected)
.Select(b => b.ToString("X2")));

Console.WriteLine(result);

结果:

66-CC-02-B3-F7-40-CA-3F

让我们将其与您的输入比较:

00-67-CC-02-B3-F7-40-CA    // Your input 
66-CC-02-B3-F7-40-CA-3F // Should be for 0.2051076530529798

看来你应该跳过 1 byte(你在错误的位置读取流)。

// I've assumed that the next byte is `3F`
// Your input without starting `00` but with final `3F`
string data = "67-CC-02-B3-F7-40-CA-3F";

double value = BitConverter.ToDouble(data
.Split('-')
.Select(item => Convert.ToByte(item, 16))
.ToArray(),
0);

Console.Write(value);

结果:

 0.20510765305298   

关于c# - 在 C# 中从二进制值转换为 double 值时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58377269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com