将带符号的十进制转换为使用二进制补码编码的十六进制
我需要使用二进制补码符号将有符号整数编码为十六进制。例如,我想转换
e.g. -24375 to 0xffffa0c9.
到目前为止,我一直在处理以下几行:
parseInt(-24375).toString(2)
> "-101111100110111"
这与 Wolfram Alpha 显示,但我不确定如何获取数字的有符号24位int表示(ffffa0c9)。
我已经弄清楚如何获取无符号的二进制数并将其表示为二进制补码:
~ parseInt("101111100110111", 2) + 1
> -23475
但我不确定是否将该数字的二进制表示形式转换为十六进制。
有什么想法吗?
I need to encode a signed integer as hexadecimal using via the two's complement notation. For example I would like to convert
e.g. -24375 to 0xffffa0c9.
So far I have been working on the following lines:
parseInt(-24375).toString(2)
> "-101111100110111"
This matches what Wolfram Alpha displays, but I am not sure how to get to the signed 24bit int representation of the number (ffffa0c9).
I've worked out how to take the unsigned binary number and represent this as two's complement:
~ parseInt("101111100110111", 2) + 1
> -23475
but I am not sure get the binary representation of this number to convert to hex.
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是使用
parseInt
的一个非常简单的解决方案:对于长度最大为 16 的十六进制应该可以正常工作。
Here's a pretty straightforward solution using
parseInt
:Should work fine for hexadecimals with length of up to 16.
为了创建固定大小的双补数字,我创建了工厂方法:
现在,为了解决您的问题,您可以创建函数
toInt8
、toInt16
、toInt32
code>等,并用它来将JS数字转换为二进制补码。 int8 的示例:To create two's-compliment numbers of fixed size I've created factory method:
Now, to solve your question you can create functions
toInt8
,toInt16
,toInt32
, etc. And use it to convert JS numbers to two's compliment. Example with int8: