[英]Javascript replace byte array sequence
我正在尝试替换二进制文件中的一些文本。 我将二进制文件转换为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");
}
}
试试看 不久前,我做了一个类似的算法,将其挖掘出来并为您修改。
只要dataFrom和dataTo的长度相同(只要fileData大小不变),它将起作用。
不管大小如何,它都可以工作。
var replaceBytes = function(fileData, dataFrom, dataTo) { var loc = 0, sz = fileData.length; var checksComplete = 0, totalChecks = dataFrom.length; while(loc < sz && checksComplete < totalChecks) { if(dataFrom[checksComplete] === fileData[loc++]) checksComplete++; else checksComplete = 0; } if(checksComplete === totalChecks) { // Match found -- creates a new (regular) array to return Array.prototype.splice.apply( fileData = Array.prototype.slice.call(fileData), [loc - totalChecks, totalChecks].concat(dataTo) ); } return fileData; }; document.body.innerText = '[' + replaceBytes( new Uint8Array([0,0,0,0,67,99,110,75,0,0,0,0,70,66,67,0,0,0,0]), // File data [67,99,110,75,0,0,0,0,70,66,67], // Byte sequence to search for [67,99,110,75,0,0,0,0,80,70,67,20,40,60,80] // Byte sequence to replace with ).join(',') + ']';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.