使用类型化数组的

时间:2018-04-20 12:38:02

标签: javascript binary

我正在尝试解析二进制消息。

我已经创建了一个获取短值的函数,但是当第二个字节为负数时,这不起作用。 例如:

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 ??

1 个答案:

答案 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()方法,您必须决定哪个方法适用于您的模型)