在Java中使用十进制和十六进制进行转换

时间:2012-10-23 11:25:22

标签: java

假设我的字节值为0x12(十进制18)。我需要将其转换为十进制12.这是我如何做到的:

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

有没有更好的方法(例如,不使用字符串和解析)?

3 个答案:

答案 0 :(得分:2)

试试这个:

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

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

答案 1 :(得分:1)

如果要预先编写二进制编码的十进制并转换为二进制,则可以转换为十六进制字符串并将其解释为十进制字符串。您的方法是完全有效的方法(但要小心,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));

如果您的输入宽于一个字节,则此方法会轻易失控,因为您需要单独处理每个半字节。

答案 2 :(得分:0)

十六进制到十进制 - Integer.parseInt(str,16)

十进制到十六进制 - Integer.toHexString(195012)