Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 将不同数据类型的类型化数组合并到单个arraybuffer中_Javascript_Arrays_Websocket_Binary_Typed Arrays - Fatal编程技术网

Javascript 将不同数据类型的类型化数组合并到单个arraybuffer中

Javascript 将不同数据类型的类型化数组合并到单个arraybuffer中,javascript,arrays,websocket,binary,typed-arrays,Javascript,Arrays,Websocket,Binary,Typed Arrays,我想知道是否有一种方法可以将不同类型的多个类型化数组合并到一个arraybuffer中 目前,我正在通过WebSocket向服务器发送二进制数据。但现在我只使用Uint8数组。因此,我组装了一个新的Uint8Array([with,the,data,I,need]),并将该数组的缓冲区(Unint8Array.buffer)发送到服务器 但现在可能会发生这样的情况,我需要在请求中包含一些Uint16或Float32数据,混合在Uint8数据中。有没有办法做到这一点,以及如何做到这一点 编辑:请求

我想知道是否有一种方法可以将不同类型的多个类型化数组合并到一个arraybuffer中

目前,我正在通过WebSocket向服务器发送二进制数据。但现在我只使用Uint8数组。因此,我组装了一个新的Uint8Array([with,the,data,I,need]),并将该数组的缓冲区(Unint8Array.buffer)发送到服务器

但现在可能会发生这样的情况,我需要在请求中包含一些Uint16或Float32数据,混合在Uint8数据中。有没有办法做到这一点,以及如何做到这一点

编辑:请求数据的长度未知,因为我必须动态组合请求


感谢您的回复:)

是的,您可以这样做,这就是为什么类型数组将数组与其存储内容的缓冲区分开的原因。下面是两个缓冲区视图的示例,一个是字节视图,另一个是单词视图:

编辑:请求数据的长度未知,因为我必须动态组合请求


如果您已经分配了足够大的
数组缓冲区,那么这不一定是问题,您只需要在(比如)缓冲区剩余长度的相关起点创建视图。但是,至少在编写之后,您必须跟踪所编写的内容的大小,以便知道在何处继续处理其他数据。

请参阅,以获取从任何特定偏移量开始的相同数据上的不同类型视图。嗯,这看起来很有趣。但您希望知道缓冲区的大小。有没有办法创建一个不同类型的数组缓冲区?因此,如果我有一个Uint8和一个Uint16数组,我可以将它们“浓缩”到一个缓冲区?@Fidel90:您只需创建一个
ArrayBuffer
,它足够大,可以同时容纳这两个数组(
var buf=new ArrayBuffer(yourInt8Array.buffer.length+yourInt16Array.buffer.length);
),然后将键入的数组复制到其中。非常感谢,我想我现在更明白这一点了。我要试试这个。祝你今天愉快:)
// Create the buffer
var buf = new ArrayBuffer(10);

// Create a byte view of it
var a8 = new Int8Array(buf);

// Create a word view of it
var a16 = new Int16Array(buf, 2, 2);

// Set a couple of words
a16[0] = 0x1221;
a16[1] = 0x2442;

// Show the contents of the byte array
var i;
for (i = 0; i < a8.length; ++i) {
  console.log("0x" + a8[i].toString(16));
}
0x0 0x0 0x21 0x12 0x42 0x24 0x0 0x0 0x0 0x0
// Create a byte view and underlying buffer
var a8 = new Int8Array(10);

// Create a word view of the byte view's buffer
var a16 = new Int16Array(a8.buffer, 2, 2);

// Set a couple of words
a16[0] = 0x1221;
a16[1] = 0x2442;

// Show the contents of the byte array
var i;
for (i = 0; i < a8.length; ++i) {
  console.log("0x" + a8[i].toString(16));
}