我有一个如下所示的字符串:[“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
}
但是,它不起作用。抱怨无法转换的类型字符串到字节。
任何人都可以帮我解决这个类型转换吗?
答案 0 :(得分:7)
已编辑:感谢@Gabe将Integer.parseInt
更改为Byte.parseByte
您可以使用Byte.parseByte(String s, int radix) - 您的基数为2
(即基数为2)
这是一个将String数组转换为byte[]
的方便的方法:
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" })));
}
输出:
[88, 66, 77, 67]
答案 1 :(得分:3)
很难从你的问题中看出来,但听起来你真的想要
byte x = Byte.parseByte(payloadarr[i], 2);
答案 2 :(得分:2)
你不能使用(只是)类型转换来做到这一点。
您需要使用Integer.parseInt(String, int)
为int
的{{1}}。这会为您提供int
,您需要投放到byte
。
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
}
备注
如果NumberFormatException
的任何组件不是二进制字符串,则上述方法将抛出payloadarr
。
我修复了payload
...