我将数据类型值存储到文件中然后使用它,但得到了错误的结果。我需要做什么才能得到正确的结果?
BinaryWriter bw = new BinaryWriter(file.OpenWrite());
string str = "Lalisa";
int num = 10;
decimal dec = 2;
bw.Write(str);
bw.Write(num);
bw.Write(dec);
bw.Close();
BinaryReader br = new BinaryReader(file.OpenRead());
Console.WriteLine(br.ReadString());
Console.WriteLine(br.ReadInt16());
Console.WriteLine(br.ReadDecimal());
br.Close();
/*
output:
Lalisa
10
131072
*/
Run Code Online (Sandbox Code Playgroud)
写入器输出
注意* 我正在使用 FileInfo 类作为流。这样做的目的是为了学习,我并不是想解决一个项目的问题。
问题是下面一行
Console.WriteLine(br.ReadInt16());
Run Code Online (Sandbox Code Playgroud)
您正在写入一个 32 位整数,但只读回 16 位,这会导致后续读取出现问题。
你应该有
Console.WriteLine(br.ReadInt32());
Run Code Online (Sandbox Code Playgroud)
这应该可以解决你的问题
解释:
字节以 Little Endian 格式写入,因此 10 个 int 和 2 个十进制写入如下。方括号用于标记 和 的开始和int结束decimal
[0A 00 00 00] [02 00 00 00...00]
Run Code Online (Sandbox Code Playgroud)
但是,当您将 int 读取为 16 位值时,这就是您对要读取的位进行分组的方式
[0A 00] [00 00 02 00 00 00...00]
Run Code Online (Sandbox Code Playgroud)
正如您所注意到的,int在此过程中并没有受到影响,仍然被读为0x000A,但小数点移动了 2 个字节,将其从 切换0x02为0x020000十进制数 131702
如果格式是大尾数,那么您会看到 int 得到错误的值0x00
| 归档时间: |
|
| 查看次数: |
424 次 |
| 最近记录: |