c# - 将双精度值存储在二进制文件中并读取它
问题描述
我需要将双精度值存储在二进制文件中并读取它们。我的数据存储在一个数组中。我已经尝试了以下代码,但显然我存储的值比数组大小更多,并且我正在读取完全错误的数据。就像我从数组 [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++;
}
}
}
解决方案
你正在写双打:
binary_writer.Write(DataCollection_array[i]);
但是您只读取字节:
Channels.Add((double)reader.ReadByte()); // Read one byte
将其更改为:
Channels.Add(reader.ReadDouble()); // Read one double
推荐阅读
- angular - 如何在 Angular 中推动儿童
- java - 单元测试时如何使用测试资源文件夹中的数据
- dart - Firestore query based in subcollection attribute
- python - 从字符前后的数据列(字符串)中提取元素
- python - python 正则表达式的 \b 表示法?
- dataweave - $在dataweave中有什么用?
- android - 复制现有片段
- php - 无法使用 laravel-scout-tntsearch-driver 进行搜索
- jekyll - Jekyll - 可以循环浏览所有帖子类型吗?
- angular - 在 Ionic 项目中找不到模块“src/environments/environment”