javascript - 将javascript Integer转换为字节数组并返回

标签 javascript

function intFromBytes( x ){
    var val = 0;
    for (var i = 0; i < x.length; ++i) {        
        val += x[i];        
        if (i < x.length-1) {
            val = val << 8;
        }
    }
    return val;
}

function getInt64Bytes( x ){
    var bytes = [];
    var i = 8;
    do {
    bytes[--i] = x & (255);
    x = x>>8;
    } while ( i )
    return bytes;
}

我正在尝试将 javascript 数字转换为字节数组,然后再转换回数字。然而,上述函数会产生非常大的错误输出。

var array = getInt64Bytes(23423423);    
var value = intFromBytes(array);

console.log(value); //Prints 23423423 - correct

var array = getInt64Bytes(45035996273704);  
var value = intFromBytes(array);

console.log(value); //Prints -1030792152 - incorrect

据我所知,javascript float 是 53 位,所以它不应该溢出? alert(Math.pow(2,53)) 工作正常。

最佳答案

使用 Susanoh13 提供的提示,这里有两个函数允许数字从/到 ByteArray 的转换:

longToByteArray = function(/*long*/long) {
    // we want to represent the input as a 8-bytes array
    var byteArray = [0, 0, 0, 0, 0, 0, 0, 0];

    for ( var index = 0; index < byteArray.length; index ++ ) {
        var byte = long & 0xff;
        byteArray [ index ] = byte;
        long = (long - byte) / 256 ;
    }

    return byteArray;
};

byteArrayToLong = function(/*byte[]*/byteArray) {
    var value = 0;
    for ( var i = byteArray.length - 1; i >= 0; i--) {
        value = (value * 256) + byteArray[i];
    }

    return value;
};

关于javascript - 将javascript Integer转换为字节数组并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8482309/

相关文章:

Javascript 函数无法将样式显示从无更改为阻止 img/图像源

javascript - 查找一个数组的任何元素是否存在于另一个数组中

javascript - 将事件事件事件数据发送到 Google Analytics 或 Tag Manager

javascript - Twilio 将座席连接到队列中的调用

javascript - 获取动态表值

javascript - 如何用Javascript增加存储在变量中的变量?

javascript - 自动完成删除值

javascript - 无法读取 Reactnative 中 null 错误的属性 'bindings'

javascript - 使用 javascript 重写 div

javascript - 如何在javascript中查找x是否等于数组中的任何值