我需要将一个字节转换为Java脚本有符号整数。我已经检查过this link可以转换2个字节,但是如何降级并仅转换一个字节?
例如0x0A为10,0xD4呢?
答案 0 :(得分:1)
Javascript 将按位运算符处理为有符号的 32 位整数。
知道了这一点,如果要对字节进行符号扩展,则需要将字节的最高位(表示符号)传播到三十二位整数中的所有高位。这可以通过以下方式实现:
value << 24 >> 24
这样做是将字节移到 32 位整数的顶部,然后将其向下移回保留符号位。
同样,您可以使用以下命令对 16 位值进行符号扩展:
value << 16 >> 16
答案 1 :(得分:0)
我想出了这个解决方案:
print_random()
希望它可以为其他人节省一些时间。 convertToSignedInt(0x81)//返回-1
答案 2 :(得分:0)
此解决方案使用负数的2补码转换,这是对负数进行编码的标准方式。
function uncomplement(val, bitwidth) {
var isnegative = val & (1 << (bitwidth - 1));
var boundary = (1 << bitwidth);
var minval = -boundary;
var mask = boundary - 1;
return isnegative ? minval + (val & mask) : val;
}
uncomplement(0xFF,8)返回-1
uncomplement(0x80,8)返回-128
uncomplement(0x7F,8)返回127