Java字符串,单个字符到十六进制字节

时间:2015-04-28 08:07:21

标签: java hex

我想将单个字符串转换为5个十六进制字节,一个字节表示十六进制数字:

喜欢

String s = "ABOL1";

byte[] bytes = {41, 42, 4F, 4C, 01}

我尝试了以下代码,但是当字符串太大时Byte.decode出错,比如“4F”或“4C”。还有另一种转换方法吗?

String s = "ABOL1";
char[] array = s.toCharArray();
for (int i = 0; i < array.length; i++) {
  String hex = String.format("%02X", (int) array[i]);
  bytes[i] = Byte.decode(hex);
}                

4 个答案:

答案 0 :(得分:5)

你是否有任何理由试图通过字符串?因为你可以这样做:

accountNo INT NOT NULL AUTO_INCREMENT PRIMARY KEY

甚至用以下代码替换所有这些代码:

bytes[i] = (byte) array[i];

答案 1 :(得分:2)

您可以使用String.format()char转换为十六进制String

String hex = String.format("%04x", (int) array[i]);

或威胁charint并使用:

String hex = Integer.toHexString((int) array[i]);

答案 2 :(得分:2)

使用String hex = String.format("0x%02X", (int) array[i]);在字符串前指定带有0x的HexDigits。

更好的解决方案是直接将int转换为byte

bytes[i] = (byte)array[i];

答案 3 :(得分:-1)

Byte.decode() javadoc指定十六进制数字应位于"0x4C"表单上。所以,要摆脱异常,试试这个:

String hex = String.format("0x%02X", (int) array[i]);

可能还有一种更简单的转换方法,因为String类有一个将字符串转换为字节的方法:

bytes = s.getBytes();

或者,如果您希望将原始转换为字节数组:

int i, len = s.length();
byte bytes[] = new byte[len];
String retval = name;
for (i = 0; i < len; i++) {
    bytes[i] = (byte) name.charAt(i);
}