首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript简单BitConverter

JavaScript简单BitConverter
EN

Stack Overflow用户
提问于 2018-04-21 00:41:01
回答 1查看 2.5K关注 0票数 1

我需要为C# BitConverter制作简单的JavaScript。我做了简单的BitConverter

代码语言:javascript
复制
class BitConverter{
constructor(){}
GetBytes(int){
    var b = new Buffer(8)
    b[0] = int;
    b[1] = int >> 8
    b[2] = int >> 16
    b[3] = int >> 24
    return b
}
ToInt(buffer){
    return buffer[0] | buffer[1]<<8 | buffer[2] << 16 | buffer[3] << 24 
}
}

GetBytes给了我和c#一样的输出,但是toInt没有.toInt不给我我在GetBytes (更大的数字)示例中所放的内容:

代码语言:javascript
复制
var a = new BitConverter()
var e = 285128170;
var c =a.GetBytes(e);
var v = a.ToInt(c);
console.log(e) // 2851281703
console.log(c) // <Buffer 27 1b f3 a9 00 00 00 00>
console.log(v) //-1443685593
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-21 01:02:56

Javascript将您的最终结果处理为一个有符号的数字。您可以通过使用>>> 0结束按位操作来解决这个问题,这将强制符号位为0。因此,对于你的例子:

代码语言:javascript
复制
class BitConverter{
    GetBytes(int) {
        var b = new Buffer(8)
        b[0] = int;
        b[1] = int >> 8
        b[2] = int >> 16
        b[3] = int >> 24
        return b
    }
    ToInt(buffer) {
        return (buffer[0] | buffer[1]<<8 | buffer[2] << 16 | buffer[3] << 24) >>> 0;
    }
}

var converter = new BitConverter();
converter.ToInt(converter.GetBytes(2851281703)) // Returns 2851281703

来自零填充右移文档

此运算符将第一个操作数(指定的位数)移至右侧。移至右侧的多余位被丢弃。零位从左边移入。符号位变为0,所以结果总是非负的。

强调我的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49951290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档