Java中的整数到两位十六进制

Posted

技术标签:

【中文标题】Java中的整数到两位十六进制【英文标题】:Integer to two digits hex in Java 【发布时间】:2012-01-31 03:36:30 【问题描述】:

我需要在 Java 中将整数值更改为 2 位十六进制值。有什么办法吗? 谢谢

我最大的数字是 63,最小的数字是 0。 我想要小值的前导零。

【问题讨论】:

您需要打印吗?你需要把它变成一个字符串吗? 我将以两位十六进制写入文件 您至少检查过 Integer javadoc 吗?您打算如何将 12345656 转换为 2 位十六进制值? 【参考方案1】:
String.format("%02X", value);

如果您使用X 而不是x as suggested by aristar,则无需使用.toUpperCase()

【讨论】:

这是目前最好的答案。 同意这个比其他任何一个都好。它完美地工作。我唯一建议的是对传递给该方法的参数进行更多描述。如果我将值作为整数或十六进制字符串传递,我必须查找。 不幸的是,这不适用于字符串,你 have to use a little calculation hack【参考方案2】:
Integer.toHexString(42);

Javadoc:http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toHexString(int)

但是请注意,这可能会给您超过 2 位数字! (一个整数是 4 个字节,所以你可能会得到 8 个字符。)

只要您绝对确定您只处理单字节值(255 或更少),这里有一些技巧来获取您的填充:

Integer.toHexString(0x100 | 42).substring(1)

Left padding integers (non-decimal format) with zeros in Java 有更多(和更好的)解决方案。

【讨论】:

不错的零填充黑客 :) 您可以对更大的值使用相同的技术。如果要填充最多 2 字节的值,可以执行 Integer.toHexString(0x10000 | value).substring(1)。对于 N 个十六进制数字,您在“1”之后附加 N 个 0。当然,你的十六进制值不能超过 N 位。【参考方案3】:
String.format("%02X", (0xFF & value));    

【讨论】:

有人能解释一下为什么这是按位和 0xFF 做的吗?这就是为什么关于 SO 的答案不应该只是代码 OxFF & (byte)value 只是将有符号字节转换为无符号字节。 (int)-1 = 0xFFFFFFFF, (int)(-1 & 0xFf) = 0xFF 在这种情况下,由于 "%02X" 格式,不需要按位和 0xFF。 %02X 说明符指定至少两位数。如果你想要两个数字(丢弃高位),那么你需要按位和。 很高兴知道,感谢您提供更多信息!【参考方案4】:

使用Integer.toHexString()。如果您只有一位数字,请不要忘记用前导零填充。如果您的整数大于 255,您将获得超过 2 位的数字。

StringBuilder sb = new StringBuilder();
sb.append(Integer.toHexString(myInt));
if (sb.length() < 2) 
    sb.insert(0, '0'); // pad with leading zero if needed

String hex = sb.toString();

【讨论】:

使用StringBuilder真的是一种改进吗? pastebin.com/KyS06JMz【参考方案5】:

如果您只需要打印它们,试试这个:

for(int a = 0; a < 255; a++)
    if( a % 16 == 0)
        System.out.println();
    
    System.out.printf("%02x ", a);

【讨论】:

【参考方案6】:

我使用它来获取一个字符串,该字符串表示一个整数的等效十六进制值,每个字节用空格分隔 EX : 4 字节中 260 的十六进制值 = 00 00 01 04

    public static String getHexValString(Integer val, int bytePercision)
    StringBuilder sb = new StringBuilder();
    sb.append(Integer.toHexString(val));

    while(sb.length() < bytePercision*2)
        sb.insert(0,'0');// pad with leading zero
    

    int l = sb.length(); // total string length before spaces
    int r = l/2; //num of rquired iterations

    for (int i=1; i < r;  i++)
        int x = l-(2*i); //space postion
        sb.insert(x, ' ');
    
    return sb.toString().toUpperCase();         


public static void main(String []args)
    System.out.println("hex val of 260 in 4 bytes = " + getHexValString(260,4));

【讨论】:

【参考方案7】:

根据 GabrielOshiro 的说法,如果您希望将整数格式化为长度为 8,请试试这个

String.format("0x%08X", 20) //print 0x00000014

【讨论】:

以上是关于Java中的整数到两位十六进制的主要内容,如果未能解决你的问题,请参考以下文章

韩顺平 java笔记 第20讲 二进制 位运算 移位运算

选做题:两位十进制转换为二进制

如何从 Java 中的十进制整数中获取十六进制值?

Spark Java 将数据帧中的每个值四舍五入到小数点后两位。

c语言中怎么将十六进制中的高位和低位分别存到数组中

Java中的十六进制转整数