2

作为一个个人项目,我正在用 JavaScript(基于 HTML5)编写一个 6502 模拟器。我正在从我用 C 语言创建的前身移植其中的一些内容。要加载文件(在我的情况下为 ROM),我可以使用以下 C 代码:

unsigned char* buffer = calloc(1, 4096);
FILE* file = fopen("xyz", "rb");
fread(buffer, 1, 4096, file);
fclose(file);

并像这样访问它:

char firstChar = buffer[0];
short nextShort = (buffer[2] << 8) | buffer[1];
free(buffer);

现在,我需要能够将它移植到 JavaScript。对于输入,我可以使用文件输入做这样的事情:

var file = document.getElementById("picker").files[0];
var reader = new FileReader();
reader.readAsDataURL(file);

从这里开始,我将 reader.result 作为文件的巨型 base64 编码。我需要一种访问二进制文件的方法,就像在开始的 C 示例中所做的那样,我可以简单地获取值(或使用简单的按位运算)

我猜最可行的解决方案是一组值 0-255,但我只需要访问,不管如何。

4

2 回答 2

1

@bfavaretto 为我指明了正确的方向

var file = document.getElementById("picker").files[0];
var reader = new FileReader();
reader.readAsArrayBuffer(file);
var buffer = new Uint8Array(reader.result);

然后可以将其作为第一个字节的缓冲区 [0] 访问。

于 2013-07-14T18:20:05.170 回答
0

我是simplebuf图书馆的作者。它允许快速二进制解析/序列化,并且完全用 javascript 编写。

例子:

var layout = [
    sb.field("len", sb.type.uint(32)),
    sb.field("padding", sb.type.uint(32)),
    sb.field("id", sb.type.string_dynamic("len"))
];
var original = {len: 4, "padding": 999, "id": "1234"};
sb.write(buffer, 0, original, layout);

https://github.com/conceptacid/simplebuf.js

于 2015-11-07T21:30:27.320 回答