C# 二进制文件格式:为什么系统读取所有4个字节,并将值正确显示为25736483

C# 二进制文件格式:为什么系统读取所有4个字节,并将值正确显示为25736483,c#,binaryfiles,binary-data,C#,Binaryfiles,Binary Data,使用c#程序类,我在一个文件中写了两个字 bw.write(i); bw.写入; 其中i是一个值为25736483的整数。而s是一个带值的字符串I'm happy 我再次读取文件并将值输出到textbox.text iN=br.ReadInt32(); newS=br.ReadString(); this.textBox1.Text=i.ToString()+新闻; 整数将存储在4个字节中,字符串将存储在另外11个字节中。当我们阅读时,系统如何知道它必须生成4个字节而不是1个字节。为什么系统

使用c#程序类,我在一个文件中写了两个字

bw.write(i);
bw.写入;
其中
i
是一个值为
25736483
的整数。而
s
是一个带值的字符串
I'm happy

我再次读取文件并将值输出到
textbox.text

iN=br.ReadInt32();
newS=br.ReadString();
this.textBox1.Text=i.ToString()+新闻;

整数将存储在4个字节中,字符串将存储在另外11个字节中。当我们阅读时,系统如何知道它必须生成4个字节而不是1个字节。为什么系统读取了所有4个字节,并将值正确显示为
25736483

在您的平台上,整数是32位的。因此,当您将一个整数传递给
write
时,您得到了一个写入4字节的重载。
ReadInt32
函数知道读取四个字节,因为32位是四个字节,所以它总是这样做。

您告诉它使用
ReadInt32
读取Int32,而
Int32
是四个字节(32位)。所以你说“读取一个四字节(32位)整数”,它完全按照你说的做了


使用
bw.write(i)时也会发生同样的事情-正如您所说,
i
是一个整数,您让它写一个整数。由于平台上的默认整数为4字节(32位),因此它写入了4个字节。

Write
方法对它知道如何写入的每个变量类型都有一个重载。这个重载确切地知道在流中存储值需要多少字节。 您可以看到每个特定的重载


当您读取数据时,您会调用.read的正确版本来读取您试图读取的数据类型,该数据类型也经过专门编码,以了解该类型中有多少字节。

为什么在您要求时,它会写入四个字节并读取四个字节?我不明白?注意ReadInt32中的32,即32位==32/8==4字节。它不知道,是你让它做对的。