如何在Visual Basic中将修改后的16位整数写回字节数组指定位置?
解决方案
直接用array(1024) = Data16无效的核心原因是:Data16是16位无符号整数(UInt16),占2个字节存储空间,而array(1024)仅对应单个字节的位置,无法容纳完整的16位数值。
方法一:用BitConverter转换后写入
先把修改后的Data16转换成对应字节数组,再将两个字节分别写入原数组的目标偏移位置:
' 将UInt16值转换为字节数组 Dim bytes() As Byte = BitConverter.GetBytes(Data16) ' 把两个字节写回原数组的1024和1025偏移位 array(Data_Offset) = bytes(0) array(Data_Offset + 1) = bytes(1)
方法二:沿用已有的MemoryStream和BinaryWriter
如果你想复用代码里已创建的流对象,可以调整流位置后直接用BinaryWriter写入,逻辑更连贯:
Dim array() As Byte = File.ReadAllBytes(Filename) Using memory As MemoryStream = New MemoryStream(array) Using reader As BinaryReader = New BinaryReader(memory) ' 读取偏移1024处的16位整数 memory.Position = 1024 Dim Data16 As UInt16 = reader.ReadUInt16() ' 修改Data16的值(示例操作) Data16 = Data16 * 2 ' 将流指针移回1024偏移处 memory.Position = 1024 Using writer As BinaryWriter = New BinaryWriter(memory) writer.Write(Data16) ' 直接写入修改后的16位整数 End Using End Using End Using ' 最后记得把修改后的数组写回原文件 File.WriteAllBytes(Filename, array)
注意:BitConverter的字节序和系统默认一致,和你用BitConverter.ToUInt16读取时的规则匹配,无需额外调整。如果你的二进制文件要求固定大端/小端字节序,需要手动调换字节数组的顺序后再写入。
内容的提问来源于stack exchange,提问作者nees
相关产品推荐
相关产品推荐

