如何在Java中将hex字符串转换为字节值
我有一个String数组。 我想将其转换为字节数组。 我使用Java程序。 例如:
String str[] = {"aa", "55"};
转换成:
byte new[] = {(byte)0xaa, (byte)0x55};
我能做什么?
看一下这个样本我猜你的意思是字符串数组实际上是一个字节的HEX表示数组,不是吗?
如果是,那么对于每个字符串项,我将执行以下操作:
- 检查字符串是否只包含2个字符
- 这些字符在’0′..’9’或’a’..’f’间隔(也考虑到他们的情况)
- 将每个字符转换为相应的数字,减去代码值’0’或’a’
-
构建一个字节值,其中第一个char是较高位,第二个char是较低位。 例如
int byteVal = (firstCharNumber << 4) | secondCharNumber;
String str = "Your string"; byte[] array = str.getBytes();
将字符串转换为字节数组:
byte[] theByteArray = stringToConvert.getBytes();
将字符串转换为字节:
String str = "aa"; byte b = Byte.valueOf(str);
你可以尝试类似的东西:
String s = "65"; byte value = Byte.valueOf(s);
对String数组中的所有元素使用Byte.ValueOf()
方法将它们转换为字节值。
还有很长的路要走:) 我不知道摆脱冗长陈述的方法
ArrayList bList = new ArrayList (); for(String ss : str) { byte[] bArr = ss.getBytes(); for(Byte b : bArr) { bList.add(b); } } //if you still need an array byte[] bArr = new byte[bList.size()]; for(int i=0; i
由于hex字符串没有单字节转换的答案,这里是我的:
private static byte hexStringToByte(String data) { return (byte) ((Character.digit(data.charAt(0), 16) << 4) | Character.digit(data.charAt(1), 16)); }
样品用法:
hexStringToByte("aa"); // 170 hexStringToByte("ff"); // 255 hexStringToByte("10"); // 16
或者你也可以试试Integer.parseInt(String number, int radix)
imo,比其他方式更好。
// first parameter is a number represented in string // second is the radix or the base number system to be use Integer.parseInt("de", 16); // 222 Integer.parseInt("ad", 16); // 173 Integer.parseInt("c9", 16); // 201
String source = "testString"; byte[] byteArray = source.getBytes(encoding);
您可以预先对数组中的所有字符串执行相同操作。
最简单的方法(使用Apache Common Codec):
byte[] bytes = Hex.decodeHex(str.toCharArray());
String str[] = {"aa", "55"}; byte b[] = new byte[str.length]; for (int i = 0; i < str.length; i++) { b[i] = (byte) Integer.parseInt(str[i], 16); }
Integer.parseInt(string,radix)将字符串转换为整数,radix参数指定数字系统。
如果字符串表示hex数,则使用16的基数。
如果字符串表示二进制数,则使用2的基数。
如果字符串表示十进制数,则使用10的基数(或省略基数参数)。
有关更多详细信息,请查看Java文档: https : //docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt( java.lang.String,% 20int)
在这里,如果要将字符串转换为byte []。有一个实用程序代码:
String[] str = result.replaceAll("\\[", "").replaceAll("\\]","").split(", "); byte[] dataCopy = new byte[str.length] ; int i=0; for(String s:str ) { dataCopy[i]=Byte.valueOf(s); i++; } return dataCopy;