Java打印四字节十六进制数

Posted

技术标签:

【中文标题】Java打印四字节十六进制数【英文标题】:Java print four byte hexadecimal number 【发布时间】:2013-01-18 06:12:17 【问题描述】:

我有一个小问题。我有 5421、-1 和 1 之类的数字。我需要将它们打印成四个字节,例如:

5421 -> 0x0000152D
-1   -> 0xFFFFFFFF
1    -> 0x00000001

另外,我有浮点数,例如 1.2、58.654:

8.25f -> 0x41040000
8.26  -> 0x410428f6
0.7   -> 0x3f333333

我需要将这两种类型的数字转换为它们的十六进制版本,但它们必须正好是四个字节长(四对十六进制数字)。

有人知道这在 Java 中是如何实现的吗?请帮忙。

【问题讨论】:

我很困惑。 8.25 的十六进制表示应该是 0x1.08p3,而不是 0x41040000。其实0x41040000是整数1090781184的十六进制表示。 我有它作为 IEEE754 fp-numbers。 【参考方案1】:

这里有两个函数,一个是整数,一个是浮点数。

public static String hex(int n) 
    // call toUpperCase() if that's required
    return String.format("0x%8s", Integer.toHexString(n)).replace(' ', '0');


public static String hex(float f) 
    // change the float to raw integer bits(according to the OP's requirement)
    return hex(Float.floatToRawIntBits(f));

【讨论】:

不错的答案,按要求给出前导 0。 @user35443 浮点数不同,您可以在问题中添加浮点数示例吗? hex(int) 方法也可以采用"%#08x" 的格式,为您打印“0x”和前导零。【参考方案2】:

对于整数,还有一种更简单的方法。如果您希望十六进制数字的 alpha 部分为大写,请使用大写“X”,否则使用“x”作为小写。格式化程序中的“0”表示保留前导零。

public static String hex(int n) 

    return String.format("0x%04X", n);

【讨论】:

【参考方案3】:

这里是花车:

    System.out.printf("0x%08X", Float.floatToRawIntBits(8.26f));

【讨论】:

【参考方案4】:

使用

String hex = Integer.toHexString(5421).toUpperCase();  // 152D

前导零

String hex = Integer.toHexString(0x10000 | 5421).substring(1).toUpperCase();

【讨论】:

System.out.println(Integer.toHexString(5421)); --> 152d Java 文档说它没有前导零。 @SriHarshaChilakapati 但 OP 需要前导零。 @SriHarshaChilakapati 您更新的答案仍有错误,请尝试将 5421 替换为 99999999。

以上是关于Java打印四字节十六进制数的主要内容,如果未能解决你的问题,请参考以下文章

怎么将4字节16进制转化成浮点数

十六进制转换十进制(JAVA版)

指针相关

一个字节的十六进制数最大值相当于多大的十进制数,两个字节的十六进制数最大值相当于多大的十进制数

java串口通信中怎样以十六进制数发送

两位十六进制数由多少字节组成