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

如何使用Javascript向文件指定偏移位置写入十六进制代码

Node.js 向文件指定偏移写入十六进制数据修复方案

你代码存在3处核心问题,修复后即可正常写入:

  • Uint8Array构造参数错误:Uint8Array接收数值类型作为元素,你传入的字符串'00'会被转换为无效值存入数组,无法生成你需要的十六进制0x00对应字节。如果要写入两个0x00字节,需传入数值0x00。
  • fs.write参数传值错误:fs.write针对Buffer的参数规则为fs.write(fd, 待写入缓存, 缓存读取起始偏移, 要写入的字节长度, 文件写入起始偏移, 回调)。你当前填的第三个参数为1、第四个为0,代表从缓存偏移1的位置写0个字节,自然不会产生任何写入行为。
  • 偏移量换算可以直接用parseInt('008DD4C0', 16)自动转十进制,避免手动计算出错。

修复后的代码如下:

const fs = require('fs')
fs.open(filepath.filePaths[0], "r+", (err, fd) => {
    if(!err) {
        const hexOffset = '008DD4C0'
        const filePosition = parseInt(hexOffset, 16) // 自动转十进制,值为9294944和你手动计算的一致
        // 构造包含两个0x00字节的Uint8Array
        const writeBuffer = new Uint8Array([0x00, 0x00])
        // 从缓存0偏移开始,写2个字节到文件的filePosition位置
        fs.write(fd, writeBuffer, 0, writeBuffer.length, filePosition,
            (err, bw, buf) => {
                console.log('写入字节数:', bw)
                console.log('写入的缓存:', buf)
                if(!err) {
                    // 写入成功后建议主动关闭文件描述符
                    fs.close(fd, (closeErr) => {
                        if(closeErr) console.log('文件关闭失败', closeErr)
                    })
                } else{
                    console.log('写入失败', err)
                }
            }
        );
    } else{
        console.log('文件打开失败', err)
    }
});

注意:写入完成后主动调用fs.close关闭文件描述符,避免出现资源泄露。

内容的提问来源于stack exchange,提问作者Workkkkk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 14:45:04