Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript V8 ArrayBuffer来自int数组?_Javascript_C++_Arrays_Node.js_Node Gyp - Fatal编程技术网

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 }