Java 帮助将字节字符串数组转换为实际字节

Java 帮助将字节字符串数组转换为实际字节,java,type-conversion,Java,Type Conversion,我有一个字符串,看起来像这样:[“1011000”,“1000010”,“1001101”,“1000011”] 我的论点来自其他地方,所以必须是这样 我需要把它转换成一个真正的字节数组 以下是我的方法: public void send(String[] payloadarr) throws IOException { byte [] payload = {}; for (int i = 0; i < payloadarr.length; i++) {

我有一个字符串,看起来像这样:[“1011000”,“1000010”,“1001101”,“1000011”]

我的论点来自其他地方,所以必须是这样

我需要把它转换成一个真正的字节数组

以下是我的方法:

public void send(String[] payloadarr)  throws IOException { 
    byte [] payload = {};

    for (int i = 0; i < payloadarr.length; i++) {
        byte x = (byte) payloadarr[i];
        payload[i] = x;
    }
    //do byte stuff with payload
}
public void send(字符串[]payloadarr)引发IOException{
字节[]有效载荷={};
对于(int i=0;i
然而,它不起作用。抱怨字符串到字节的不可转换类型

有人能帮我做这个类型转换吗?

你不能(仅仅)使用类型转换

您需要使用
Integer.parseInt(String,int)
,其中
int
是2。这将为您提供一个
int
,您需要将其转换为
字节

public void send(String[] payloadarr)  throws IOException { 
    byte [] payload = new byte[payloadarr.length];

    for (int i = 0; i < payloadarr.length; i++) {
        payload[i] = (byte) Integer.parseInt(payloadarr[i], 2);
    }
    //do byte stuff with payload
}
public void send(字符串[]payloadarr)引发IOException{
字节[]有效载荷=新字节[payloadarr.length];
对于(int i=0;i

注释

  • 如果
    payloadarr
    的任何组件不是二进制字符串,则上述方法将抛出
    NumberFormatException

  • 我修复了
    有效负载的初始化


编辑:感谢@Gabe将idea从
Integer.parseInt
更改为
Byte.parseByte

您可以使用-您的基数为
2
(即基数2)

下面是一个将字符串数组转换为
字节[]
的简便方法:

public static byte[] stringsToBytes(String[] payloadarr) {
    byte[] payload = new byte[payloadarr.length];
    for (int i = 0; i < payloadarr.length; i++) {
        payload[i] = Byte.parseByte(payloadarr[i], 2);
    }
    return payload;
}

public static void main(String[] args) {
    System.out.println(Arrays.toString(stringsToBytes(new String[] { "1011000", "1000010", "1001101", "1000011" })));
}

很难从你的问题中分辨出来,但听起来你真的很想知道

byte x = Byte.parseByte(payloadarr[i], 2);

你试过了吗?我这样评论是因为我不知道你的要求。你的意思是你有一个字符串数组吗?这可能是错误的答案。这些字符串看起来很像是字节的基2数字表示。是-
payloadarr
是一个字符串数组。顺便说一句:这不是类型转换,而是类型转换,或者更好,是数据解析。非常感谢您的快速响应!它像一个机器人一样工作charm@brian:如果您的问题已解决,请接受最佳答案(答案旁边有一个“接受”按钮)。这是最佳答案。看起来其他提供答案的人没有意识到Byte.parseByte()的存在。这避免了强制转换,而当解析为int,然后进行缩小强制转换时,符号位确实做了正确的事情,当新手发现例如Integer.parseInt(“11011011”)==219,但(byte)Integer.parseInt(“11011011”)==37时,可能会有点惊讶。@prodicus:更不用说哪个是
(byte)Integer.parseInt(“100000000”)
返回0而不是引发异常!
byte x = Byte.parseByte(payloadarr[i], 2);