我正在尝试编写一个生成随机数的脚本,然后将这些数字转换为 4 字节组,然后将这些 4 字节组放入 Uint8Array 最后,我尝试将数组保存到二进制文件。这是我的代码:
<html>
<head>
<title>Raandom Number Generator</title>
</head>
<body>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="filesaver.min.js"></script>
<script type="text/javascript">
$(function() {
if (!Date.now) {
Date.now = function() {
return new Date().getTime();
};
}
alert("started");
var currentMousePos = {
x : -1,
y : -1
};
var randomData = [];
var bytes = new Int8Array(4);
$(document).mousemove(function(event) {
if(randomData.length>=1231){
$(document).unbind('mousemove');
console.log("Finished generating numbers ... trying to save file");
randomData = new Uint8Array(randomData);
var blob = new Blob(randomData, {type: "application/octet-stream"});
saveAs(blob, "rand.bin");
return;
}
currentMousePos.x = event.pageX;
currentMousePos.y = event.pageY;
var longRandomNumber = Date.now() * (event.pageX + 1)
* (event.pageY + 1);
for ( var i = 3; i >= 0; i--) {
bytes[i] = longRandomNumber & (255);
longRandomNumber = longRandomNumber >> 8
}
for ( var i = 0; i < 4; i++) {
randomData.push(bytes[i]);
}
console.log(randomData.length);
});
})
</script>
</body>
</html>
问题是生成的文件包含数字plain numbers
例如 Uint8Array 中的一个元素可能是 65,根据我对二进制的理解,这个值应该保存为大写字母A但它存储为65 instead
Note
filesaver.min.js 是一个我用来保存 JS 文件的库(GitHub 上的链接)
The Blob构造函数确实期望array要连接的类型化数组,但您只传递一个Uint8Array
进去。这可能会被解释为(我应该说“转换为”吗?)一个 DOM 字符串数组 - 这就是你的数字的来源。
一个快速修复方法是使用
new Blob([randomData], {type: "application/octet-stream"})
// ^ ^
但我建议要么这样做
var randomData = [];
// while randomData.length < 308
var bytes = new Uint8Array(4);
for (var i=4; i--; ) {
bytes[i] = longRandomNumber & (255);
longRandomNumber = longRandomNumber >> 8
}
randomData.push(bytes);
var blob = new Blob(randomData, {type: "application/octet-stream"});
或者不使用那些 4 字节bytes
数组:
var randomData = new Uint8Array(1232),
count = 0;
// while count < randomData.length
for (var i=4; i--; ) {
randomData[count++] = longRandomNumber & (255);
longRandomNumber = longRandomNumber >> 8
}
var blob = new Blob([randomData], {type: "application/octet-stream"});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)