【发布时间】:2016-09-10 07:10:52
【问题描述】:
我正在尝试替换二进制文件中的一些文本。我在js中将二进制文件转成字节数组,然后尝试使用我想改变的字节序列。但是,似乎字节数组不是字符串,所以我无法替换序列。我尝试过 toString(),它只是给了我大量的转义(例如 65/,34/,102/ 等)我也尝试过 join() 函数,但这似乎在字节数组中放置了空格,这不保留数组(它似乎通过添加空格来更改它,这在我以后使用 base64 编码时会产生很大的不同)。
我猜我可以循环遍历数组并单独更改字节,但我怎么能在指定的序列中做到这一点?是否可以在数组上进行查找和替换?
function read(){
var binaryfile = readbytes('C:/binaryfile.txt');
var replaced = binaryfile.join(" ");
//replaced = binaryfile.toString();
var Header1 = "67 99 110 75 0 0 0 0 70 66 67 ";
var Header2 = "67 99 110 75 0 0 0 0 80 70 67 45 0";
finalstring = replaced.replace(Header1, Header2);
alert(replaced);
}
function readbytes(s){
var f = new File(s);
var i,a,c;
var d = [];
if (f.isopen) {
c = f.eof;
for(i=0;i<c ;i++){
a = f.readbytes(1);
d.push(a);
}
return d;
f.close();
} else {
post("could not open file: " + s + "n");
}
}
【问题讨论】:
-
将您正在搜索的字节序列(即Header1)作为字节放入数组中。在您的二进制文件中,使用与搜索数组相同长度的
Array.prototype.slice(index, index + searcharray.length)创建切片。从索引 0 到 binarfile.length-searcharray.length 开始比较Array.prototype.every()1 个索引增量。 -
是的,我觉得尺寸可能是前进的方向。但是,我试图替换的实际标题字符串的大小不同(对不起,我应该在我的示例中说明这一点),所以我不确定这是可能的。
标签: javascript arrays replace find