Java 将字符串数组转换为字节数组
我有一个字符串数组,每个数组元素是一个由2个字符组成的十六进制字符串 例如,阵列可以是:Java 将字符串数组转换为字节数组,java,arrays,string,Java,Arrays,String,我有一个字符串数组,每个数组元素是一个由2个字符组成的十六进制字符串 例如,阵列可以是: String a = {"aa","ff","00",.....} 如何在Java中将此字符串数组转换为字节数组?如果我理解正确,您需要连接字符串的字节表示形式?比如: public byte[] getBytes(String[] array) { StringBuilder builder = new StringBuilder(); for(String s: array) {
String a = {"aa","ff","00",.....}
如何在Java中将此字符串数组转换为字节数组?如果我理解正确,您需要连接字符串的字节表示形式?比如:
public byte[] getBytes(String[] array) {
StringBuilder builder = new StringBuilder();
for(String s: array) {
builder.append(s);
}
return builder.toString().getBytes();
}
如果要分析无符号字节十六进制字符串,请使用
byte[] b = new byte[a.length()];
for (int i=0; i<a.length(); i++) {
b[i] = (byte) Short.parseShort(a[i], 16);
}
byte[]b=新字节[a.length()];
对于(int i=0;i
如果希望“ff”解析为255(高于java字节所能容纳的值),则需要使用shorts
short[] b = new short[a.length()];
for (int i=0; i<a.length(); i++) {
b[i] = Short.parseShort(a[i], 16);
}
short[]b=新的short[a.length()];
对于(inti=0;i您应该查看
然后,您可以遍历您拥有的每个字符串并使用该方法。然后,您可以使用该方法将其添加到ByteArrayOutputStream
转换完所有字符串后,可以使用ByteArrayOutputStream的方法。循环数组,并使用
byte b = (byte) (Integer.parseInt(theHexaString, 16));
<代码>字节.PARSEBYTER()/>代码只解析符号字节,不考虑符号位为符号位。我认为最好创建一个与字符串数组大小相同的字节数组,使用Afor循环,并在循环调用<代码> MyByth[I]=Byth.PySeCyb(MyString [i],16)< /Cord>中,将每个字符串项解析为字节。(编辑:哦,忘了基数!)使用这个链接,它几乎是一样的question@HovercraftFullOfEels-你应该把它作为答案发布。@ziesemer:我想是的。不过我有足够的代表。@user1077980.循环数组,并使用byte b=(byte)(Integer.parseInt(hexastring,16)&0xFF);byte.parseByte()将每个字符串转换成一个字节仅解析已签名的字节。同样,不解析已解析的字节。getBytes()
不会将单个字符串解析为它们的字节表示形式,而是使用每个字符的默认字符集编码——这是两个完全不同的东西。您将要删除此答案。是的,这就是我要说的。1+是,但当字符串在线程“main”中为ff exception时,is会给出一个异常java.lang.NumberFormatException:用于输入字符串:“ff”@JBNizet:另外,我甚至不认为你的答案需要&0xff
部分,因为转换应该去掉更高的位。对我来说,字节通常不是用作有符号的数字,而是作为一段纯二进制数据。我发现Java不应该让字节成为有符号的数字,因为它会让一切变得更复杂。你说得对e&0xFF。如果他想将字节转换为无符号int,则需要使用它。ByteArrayOutputStream可以工作,但在这里有点过分。此外,byte.parseByte()将阻塞“ff”