有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中十进制与十六进制的转换

假设我有一个字节值0x12(十进制18)。我需要把它转换成十进制12。我是这样做的:

byte hex = 0x12;
byte dec = Byte.parseByte(String.format("%2x", hex));
System.out.println(dec); // 12

有没有更好的方法来实现这一点(例如,不使用字符串和解析)


共 (3) 个答案

  1. # 1 楼答案

    十六进制到十进制-整数。parseInt(str,16)

    十进制到十六进制-整数。Tohextstring(195012)

  2. # 2 楼答案

    如果您想要设置一个二进制编码的十进制并转换为二进制,您可以转换为十六进制字符串并解释为十进制字符串。您的方法是一种非常有效的方法(不过要小心,byte是用Java签名的

    在这里阅读二进制编码的小数:http://en.wikipedia.org/wiki/Binary-coded_decimal

    如果要避免字符串转换,可以将每个半字节(四个字节)分开,然后乘以正确的值:

    byte hex = 0x12;
    
    if( hex&15 > 9 || hex>>>4 > 9)
     throw new NumberFormatException(); //check for valid input
    
    byte dec = (byte)((hex & 15) + 10*(hex>>>4 & 15));
    

    如果你的输入宽度超过一个字节,这个方法很容易失控,因为你需要分别处理每个字节

  3. # 3 楼答案

    试试这个:

    byte dec = (byte)(hex / 16 * 10 + hex % 16);
    

    注意,它假定原始输入是有效的BCD编码