我正在尝试解析二进制消息。
我已经创建了一个获取短值的函数,但是当第二个字节为负数时,这不起作用。 例如:
function bytesToShort(arr, offset){
return (arr[offset] << 8) | arr[offset + 1];
}
let binary = new Int8Array([3, -40]); // equals to 00000011 10101000
bytesToShort(binary, 0); // returns -40
// but 0b0000001110101000 = 936
为什么我得到这个结果?以及如何更改函数以获得正确答案,而不使用Int16Array ??
答案 0 :(得分:0)
我认为问题的核心在于,即使您的类型化数组以单字节存储值,当您检索它们时,JS会将它们转换为表示相同值的4字节数字,并对它们执行操作。如果要从字节数组中检索多字节值,我建议使用DataView:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView
在您的示例中,这将是:
$stateProvider
// MULTIPLE NAMED VIEWS =================================
.state('/', {
url: '/',
templateUrl: '/views/reset.html' ,
controller : 'RecoverController'
});
$urlRouterProvider
/* .when('/:templateFile', {
templateUrl: function(param) {
return 'views/' + param.templateFile + '.html';
}
}) */
.otherwise('/');
(注意:有一个单独的new DataView(arr.buffer).getInt16(0);
和getInt16()
方法,您必须决定哪个方法适用于您的模型)