首页 > 解决方案 > 将双精度值存储在二进制文件中并读取它

问题描述

我需要将双精度值存储在二进制文件中并读取它们。我的数据存储在一个数组中。我已经尝试了以下代码,但显然我存储的值比数组大小更多,并且我正在读取完全错误的数据。就像我从数组 [0] 中存储 0.26 一样,我可以看到二进制文件中极少数的第一个值是 A4 70 3D ......我不明白它是如何将 0.26 转换为这些值的以及在什么基础上。

此代码用于写入二进制文件:

  double [] DataCollection_array = new double[10000];

  public void store_data()
   {
    Binary_filename = folder_path + "\\" + "Binary1.bin";
    stream = new FileStream(folder_path + "\\" + "Binary1.bin", FileMode.Create);
    binary_writer = new BinaryWriter(stream);
    writetoBinary(DataCollection_array.size);
   }


  public void writetoBinary(int size)
        {
                for (int i = 0; i < size; i++)
                {
                    binary_writer.Write(DataCollection_array[i]);
                }
         }

此代码用于从包含二进制文件的文件夹中读取双精度值:

  int bytes_counter1 = 0;
  Channels = new List<double>[File_size];

  public void read_data ()
  {
  path2 = Directory2.folder_path + "\\" + "Binary" + file_number + ".bin";
  file_stream = new FileStream(path2, FileMode.Open, FileAccess.Read);
  using (reader = new BinaryReader(file_stream))
         {
          if (bytes_counter1 < reader.BaseStream.Length)
             {
             reader.BaseStream.Seek((count + offset1), SeekOrigin.Begin);
             Channels.Add((double)reader.ReadByte());
             bytes_counter1++;

             }
          }
     }

标签: c#binaryhex

解决方案


你正在写双打:

binary_writer.Write(DataCollection_array[i]);

但是您只读取字节:

Channels.Add((double)reader.ReadByte()); // Read one byte

将其更改为:

Channels.Add(reader.ReadDouble()); // Read one double

推荐阅读