如何使用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
相关产品推荐
相关产品推荐

