Java 帮助将字节字符串数组转换为实际字节
我有一个字符串,看起来像这样:[“1011000”,“1000010”,“1001101”,“1000011”] 我的论点来自其他地方,所以必须是这样 我需要把它转换成一个真正的字节数组 以下是我的方法: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++) {
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);