Javascript 将数据结构转换为二进制数据
我在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 =
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));
显然,也不可能将字符分配给类型化数组