Javascript V8 ArrayBuffer来自int数组?
我已经看到了能够基于以下数据创建数组缓冲区的方法:Javascript V8 ArrayBuffer来自int数组?,javascript,c++,arrays,node.js,node-gyp,Javascript,C++,Arrays,Node.js,Node Gyp,我已经看到了能够基于以下数据创建数组缓冲区的方法: QByteArray data_buffer(file.readAll().data(), file.size()); v8::Handle<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(args.GetIsolate(), data_buffer.size()); memcpy(ab->GetContents().Data(), data_buffer.data(), data_buf
QByteArray data_buffer(file.readAll().data(), file.size());
v8::Handle<v8::ArrayBuffer> ab = v8::ArrayBuffer::New(args.GetIsolate(), data_buffer.size());
memcpy(ab->GetContents().Data(), data_buffer.data(), data_buffer.size());
但是,当多次运行输出时,会产生非常不可预测的结果,这些结果似乎与原始数组中的值不匹配:
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 122, 64, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b 7a 40
01>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 88, 64, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b 58 40 0
1>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 2, 64, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b 02 40 01
>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 216, 63, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b d8 3f
01>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 79, 64, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b 4f 40 0
1>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 54, 64, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b 36 40 0
1>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 159, 63, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b 9f 3f
01>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 104, 64, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b 68 40
01>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 170, 63, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b aa 3f
01>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array[224,107,122,64,1]ArrayBuffer{[Uint8Contents]:,bytellength:5}
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array[224,107,88,64,1]ArrayBuffer{[Uint8Contents]:,bytellength:5}
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array[224,107,2,64,1]ArrayBuffer{[Uint8Contents]:,bytellength:5}
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array[224107216,63,1]ArrayBuffer{[Uint8Contents]:,bytellength:5}
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array[224107,79,64,1]ArrayBuffer{[Uint8Contents]:,bytellength:5}
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array[224,107,54,64,1]ArrayBuffer{[Uint8Contents]:,bytellength:5}
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array[224,107,159,63,1]ArrayBuffer{[Uint8Contents]:,bytellength:5}
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array[224,107,104,64,1]ArrayBuffer{[Uint8Contents]:,bytellength:5}
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array[224,107,170,63,1]ArrayBuffer{[Uint8Contents]:,bytellength:5}
我认为这与之前提到的“自己处理内存”有关——但我对这方面的了解还不够,也就是说:
< > ArrayBuffer >如何从int数组中创建C++中的一个C++,并在NoDEJS中读取那些精确的int值?< /强> < /p>我不知道随机数据的原因,但一般来说,C++中的int大小是4,而不是1字节。你应该把你的<代码> x<代码>数组声明为<代码> INT8YT T <代码>或<代码> uint 8t t <代码>。我不知道随机数据的原因,但是一般来说,C++的大小是4,而不是1字节。您应该将
x
数组声明为int8\u t
或uint8\u t
。
#include <node.h>
using namespace v8;
void Buf(const FunctionCallbackInfo<Value>& a) {
Isolate* i = a.GetIsolate();
int x[] = {6,9,8,7};
void* temp = x;
Local<
ArrayBuffer
>
v =
ArrayBuffer::New(i, temp, 5);
a.GetReturnValue().Set(v);
}
void Initialize(Local<Object> exports) {
NODE_SET_METHOD(exports, "buf", Buf);
}
NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
let a = require("./addon"),
ab = a.buf(),
ar = new Uint8Array(ab)
console.log(
ar, ab
);
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 122, 64, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b 7a 40
01>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 88, 64, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b 58 40 0
1>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 2, 64, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b 02 40 01
>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 216, 63, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b d8 3f
01>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 79, 64, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b 4f 40 0
1>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 54, 64, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b 36 40 0
1>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 159, 63, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b 9f 3f
01>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 104, 64, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b 68 40
01>, byteLength: 5 }
C:\Users\Coby\Documents\aa\atzmus\testServer>node oy.js
Uint8Array [ 224, 107, 170, 63, 1 ] ArrayBuffer { [Uint8Contents]: <e0 6b aa 3f
01>, byteLength: 5 }