我需要编码signed通过二进制补码表示法将整数表示为十六进制。例如我想转换
e.g. -24375 to 0xffffa0c9.
到目前为止,我一直在以下几方面开展工作:
parseInt(-24375).toString(2)
> "-101111100110111"
这与 Wolfram Alpha 相匹配displays http://www.wolframalpha.com/input/?i=-24375%20to%20binary,但我不确定如何获取数字的有符号 24 位 int 表示形式 (ffffa0c9)。
我已经弄清楚如何获取无符号二进制数并将其表示为二进制补码:
~ parseInt("101111100110111", 2) + 1
> -23475
但我不确定是否将该数字的二进制表示形式转换为十六进制。
有任何想法吗?
这是一个非常简单的解决方案,使用parseInt
:
function DecimalHexTwosComplement(decimal) {
var size = 8;
if (decimal >= 0) {
var hexadecimal = decimal.toString(16);
while ((hexadecimal.length % size) != 0) {
hexadecimal = "" + 0 + hexadecimal;
}
return hexadecimal;
} else {
var hexadecimal = Math.abs(decimal).toString(16);
while ((hexadecimal.length % size) != 0) {
hexadecimal = "" + 0 + hexadecimal;
}
var output = '';
for (i = 0; i < hexadecimal.length; i++) {
output += (0x0F - parseInt(hexadecimal[i], 16)).toString(16);
}
output = (0x01 + parseInt(output, 16)).toString(16);
return output;
}
}
对于长度最大为 16 的十六进制应该可以正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)