You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 22:46:01