VB.NET中如何向文件写入0xFFFFFFFF的EOF标记?
解决VB.NET中BinaryWriter写入4字节全FF的EOF标记问题
我懂你的困扰——想给模拟TAPE文件写一个FF FF FF FF的EOF标记,但用BinaryWriter的Write方法试了两次都没得到预期结果对吧?咱们来拆解下问题,再给你几个靠谱的解决方案:
问题根源:选对BinaryWriter的Write重载很关键
你遇到的问题其实是因为调用了错误的Write方法重载:
- 当你写
bw.Write(255)时,默认匹配的是Write(Int32)重载,它会把255当作32位有符号整数写入,小端模式下就变成了FF 00 00 00; - 而写
bw.Write(4294967295)时,匹配的是Write(Int64)重载,写入的是8位有符号整数,所以得到FF FF FF FF 00 00 00 00,多了4个0字节。
三种可行的解决方案
方案1:逐个写入Byte类型的255
直接调用Write(Byte)重载,连续写4次255:
' 实例化你的BinaryWriter Dim bw As New BinaryWriter(File.Open("your_tape_file.dat", FileMode.Append)) ' 写入4字节FF标记 bw.Write(CByte(255)) bw.Write(CByte(255)) bw.Write(CByte(255)) bw.Write(CByte(255)) bw.Close()
方案2:用字节数组一次性写入(更简洁)
把4个FF打包成字节数组,调用Write(Byte())重载一次性写入:
Dim bw As New BinaryWriter(File.Open("your_tape_file.dat", FileMode.Append)) Dim eofMarker As Byte() = {&HFF, &HFF, &HFF, &HFF} bw.Write(eofMarker) bw.Close()
方案3:用UInt32类型写入(利用整数最大值)
FF FF FF FF正好是32位无符号整数的最大值(4294967295),调用Write(UInt32)重载,小端模式下写入的就是4个FF:
Dim bw As New BinaryWriter(File.Open("your_tape_file.dat", FileMode.Append)) bw.Write(CUInt(4294967295)) ' 写入UInt32类型的最大值,对应4字节FF FF FF FF bw.Close()
总结
核心就是要明确你需要写入的字节长度,然后匹配BinaryWriter对应的重载:1字节用Byte,4字节用UInt32,8字节用Int64/UInt64,这样就能精准控制输出的字节序列了。
内容的提问来源于stack exchange,提问作者user9491577
相关产品推荐
相关产品推荐

