Tod*_*e93 3 c# c++ binaryreader
我正在尝试读取由C ++程序制成的二进制文件。该文件有一些数字,当我尝试读取它们时,我得到了错误的值。double double
这是从文件读取的十六进制值:
00-67-CC-02-B3-F7-40-CA
Run Code Online (Sandbox Code Playgroud)
期望值:
0.2051076530529798
Run Code Online (Sandbox Code Playgroud)
实际值:
-4.9596277989715114E+49
Run Code Online (Sandbox Code Playgroud)
二进制文件类型:double 8字节(c ++)
在转换输出C# :()doublebinaryreader.ReadDouble()
这是代码:
reader = new BinaryReader(File.Open(path, FileMode.Open), Encoding.Default);
double value = reader.ReadDouble();
Run Code Online (Sandbox Code Playgroud)
我已经检查过,我在正确的位置使用此命令。为什么我有这种不同的价值?
让我们来看看s代表的expected含义byte:
double expected = 0.2051076530529798;
string result = string.Join("-", BitConverter
.GetBytes(expected)
.Select(b => b.ToString("X2")));
Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)
结果:
66-CC-02-B3-F7-40-CA-3F
Run Code Online (Sandbox Code Playgroud)
让我们将其与您的输入进行比较:
00-67-CC-02-B3-F7-40-CA // Your input
66-CC-02-B3-F7-40-CA-3F // Should be for 0.2051076530529798
Run Code Online (Sandbox Code Playgroud)
似乎您应该跳过 1 字节(您在错误的位置读取了流)。
// 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);
Run Code Online (Sandbox Code Playgroud)
结果:
0.20510765305298
Run Code Online (Sandbox Code Playgroud)