我想将单个字符串转换为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);
}
答案 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]);
或威胁char
为int
并使用:
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);
}