Java 将字符串数组转换为字节数组

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) {

我有一个字符串数组,每个数组元素是一个由2个字符组成的十六进制字符串

例如,阵列可以是:

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”