我需要为C# BitConverter制作简单的JavaScript。我做了简单的BitConverter
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 (更大的数字)示例中所放的内容:
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发布于 2018-04-21 01:02:56
Javascript将您的最终结果处理为一个有符号的数字。您可以通过使用>>> 0结束按位操作来解决这个问题,这将强制符号位为0。因此,对于你的例子:
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,所以结果总是非负的。。
强调我的。
https://stackoverflow.com/questions/49951290
复制相似问题