0

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

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

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

4

3 回答 3

2

试试这个:

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

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

于 2012-10-23T11:27:27.917 回答
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));

如果您的输入比一个字节宽,则此方法很容易失控,因为您需要分别处理每个半字节。

于 2012-10-23T11:46:46.857 回答
0

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

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

于 2012-10-23T11:32:21.700 回答