Java:如何从32位十六进制中获取高16位和低16位值?

3
需要解决以下问题:接收一个十进制值,将其转换为32位十六进制,然后分离出该32位十六进制的高16位和低16位值。我在网上找了很久也没找到太多信息。

这听起来像是一道作业题。如果我是你,我会先编写将其转换为十六进制的例程。 - daveb
我有一种强烈的感觉,这可能是另一个人通过其可读性表示引用值的情况。说“32位HEX”,你实际上是指32位整数还是该整数的字符串表示形式? - Matti Virkkunen
3
我一直觉得很有趣,当人们用“业务逻辑”这个术语来描述一些可能与商业毫无关系的事情。好像所有的编程都是关于商业的。科学呢?它去哪了? - Matti Virkkunen
类似这样:http://babbage.cs.qc.edu/IEEE-754/Decimal.html - Jerrhann
@Matti: s/business/domain/g 满意吗? - Matt Ball
显示剩余4条评论
3个回答

6

我不确定你为什么要将其转换为十六进制数,但是如果要将32位值直接转换为两个16位值,请使用以下方法。

int x = ...
short high = x >> 16;
short low = x & 0xFFFF;

4

我猜这是一道作业题。因此,我会给你一些能帮助你解决它的信息,而不是答案。

  1. 将数字转换为十六进制。可以使用整数的 toHexString() 方法完成。
  2. 在左侧添加足够的零,使其成为8个字符长(8个十六进制字符表示32位)。您可以通过循环逐个添加零直到长度为8个字符,或者(更好的方法)只在左侧添加7个零并仅处理最右边的8个字符来完成。
  3. 将最右边的4个字符作为低16位,将紧挨着它的左侧的4个字符作为高16位。可以使用字符串的 substring() 方法以及 length() 和一些简单的减法来完成。

嗨,Kindall,toHexString方法将转换为16位十六进制,这不是所需的。例如:10000的32位十六进制为461C4000,toHexString产生的结果为2710。在其后添加零将导致00002710。 - Jerrhann
在我看来没问题。10000的十六进制绝对不是461C4000! - kindall
它以32位表示。2710是16位的。参考点:http://babbage.cs.qc.edu/IEEE-754/Decimal.html - Jerrhann
等等...你想要一个浮点数的十六进制等价值,但是你没说吗?真是气死我了...为什么你在最初的问题中没有提到这一点呢? - kindall
在我的情况下,它不是浮点数,而是十进制数。我能够生成这个十六进制表示。获取高16位和低16位 - 是否简单地将结果表示分成两个子字符串? - Jerrhann
是的,拆分十六进制字符串可能是最简单的解决方案。 - kindall


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接