Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.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 将数据结构转换为二进制数据_Javascript_Byte - Fatal编程技术网

Javascript 将数据结构转换为二进制数据

Javascript 将数据结构转换为二进制数据,javascript,byte,Javascript,Byte,我在javascript中有以下对象: var arr = { 'id': 23, // uint32 'login': 'some string' // char[16] }; 我想将这个对象转换成二进制数据(数组缓冲区)并将其发送到服务器。我想出了这样的办法: var buffer = new ArrayBuffer(36); var idView = new Int32Array(buffer, 0, 1); idView[0] = 23321; var loginView =

我在javascript中有以下对象:

var arr = {
  'id': 23, // uint32
  'login': 'some string' // char[16]
};
我想将这个对象转换成二进制数据(数组缓冲区)并将其发送到服务器。我想出了这样的办法:

var buffer = new ArrayBuffer(36);
var idView = new Int32Array(buffer, 0, 1);
idView[0] = 23321;
var loginView = new Int16Array(buffer, 4, 16);
loginView = "Random username";
因此,我在
idView
变量中有4个字节(1 int32),在
loginView
变量中有32个字节(16 int16)

我想通过ajax将其作为二进制数据发送,但当我检查服务器端字节arr时,我得到:

[25 91 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]


这显然是错误的。怎么了?

这是一个完全正确的输出

由于Node.js中的
Buffer
,因此可以使用
Uint8Array
作为调试视图:

var debugView = new Uint8Array(buffer);

console.log(debugView); // [25, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
您的代码中有一行代码实现了您可能不期望的功能:

loginView = "Random username";
它只将旧的普通
字符串
分配给
loginView
,而不使用整数填充缓冲区

您可能想做的是:

"Random username".split('').forEach((x, i) => loginView[i] = x.charCodeAt(0));
显然,也不可能将字符分配给类型化数组