使用一些比特平移弄虚作假
function uintToInt(uint, nbit) {
nbit = +nbit || 32;
if (nbit > 32) throw new RangeError('uintToInt only supports ints up to 32 bits');
uint <<= 32 - nbit;
uint >>= 32 - nbit;
return uint;
}
uintToInt(818, 10); // -206
为什么818
?因为这是你二进制字符串
parseInt('1100110010', 2); // 818
为什么10
的UINT价值?因为你的符号int由10
位在二进制串表示
'1100110010'.length; // 10
请注意,对于正数,你不能只是采取nbit = str.length;
为字符串可能不是0
-padded,你“会需要知道你实际使用多少位
你也可能要抛出一个错误
为了完整起见,
function intToUint(int, nbit) {
var u = new Uint32Array(1);
nbit = +nbit || 32;
if (nbit > 32) throw new RangeError('intToUint only supports ints up to 32 bits');
u[0] = int;
if (nbit < 32) { // don't accidentally sign again
int = Math.pow(2, nbit) - 1;
return u[0] & int;
} else {
return u[0];
}
}
intToUint(-206, 10); // 818
感谢您的答案.. 我正在从十六进制代码获取数据..有什么办法可以找到如果十六进制代码是一个有符号的十进制或无符号的十进制。 以及如何将十六进制代码转换为精确的带符号的十进制 – Chait