我想将一组字符串转换为byte []数组。首先,我做了类似的事情,将字节数组转换为字符串:
public String convertByte(byte[] msg) {
String str = "";
for(int i = 0; i < msg.length; i++) {
str += (msg[i] + " * ");
}
return str;
}
当我尝试转换回byte []数组时,我得到的值与转换为String时的值不同。我最初有些东西给了我不正确的价值。
我目前正在尝试以下方面:
public static byte[] convertStr(String ln)
{
System.out.println(ln);
String[] st = ln.split(" * ");
byte[] byteArray = new byte[23];
for(int i = 0; i < st.length; i++)
{
byteArray[i] = st[i].get byte value or something;
}
return byteArray;
}
如果我尝试使用String api中的getbytes()方法,它返回一个字节数组而不是一个字节,这是我的问题。
非常感谢任何帮助。
答案 0 :(得分:2)
这应该有效:
byte[] bytes = "Hello World".getBytes("UTF-8");
String hello = new String(bytes, "UTF-8");
以上示例使用UTF-8编码,仅作为示例。在消息输入中使用您期望的字符编码。(这个'答案'不是问题的答案......)
修改强>
所以我们需要从byte []到String再转换回byte []。 me123在值之间(和前面)添加了分隔符。正如其他人已经解释过
1.分割的正则表达式必须为" \\* "
和
2.魔术方法是Byte.parseByte(st[i])
这是一种替代方法,不使用分隔符,而是修复字节条目的宽度。 StringToByte转换器显示了一个基于字符串char数组的快速解决方案。
public static String convertByte(byte[] msg) {
StringBuilder sb = new StringBuilder();
for (byte b:msg) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
public static byte[] convertStr(String ln)
{
System.out.println(ln);
char[] chars = ln.toCharArray();
byte[] result = new byte[ln.length()/2];
for (int i = 0;i < result.length; i++) {
result[i] = (byte) hexToInt(chars[2*i], chars[2*i+1]);
}
return result;
}
private static int hexToInt(char c1, char c2) {
return ((c1 <= '9' ? c1 - '0':c1 - 'a'+10) << 4)
+ (c2 <= '9' ? c2 - '0':c2 - 'a'+10);
}
答案 1 :(得分:2)
使用Byte.parseByte
可能有助于您的第二个代码段工作。
但是,除非你有一些特定的理由使用这种表示,否则我会使用其他答案中提到的Java方法将字符串编码为字节数组。
public static byte[] convertStr(String ln)
{
System.out.println(ln);
String[] st = ln.split(" * ");
byte[] byteArray = new byte[23];
for(int i = 0; i < st.length; i++)
{
byteArray[i] = Byte.parseByte(st[i]);
}
return byteArray;
}
答案 2 :(得分:0)
我不明白你为什么要尝试按字符获取这些字节。 getBytes()及其变体将立即为整个字符串提供byte []数组。 但是,如果你想看看字符是如何编码的,那么你的方法很好,但你必须记住,一个字符可以编码在例如在某些编码中有一到四个字节,因此每个字符都需要一个字节数组。
答案 3 :(得分:0)
如果您确定String足够小以适合一个字节,那么您可以
st[i].getBytes()[0];
然而,在大多数情况下,你的String可能会更大,所以在这些情况下它是不可能的......
答案 4 :(得分:0)
如果您确定该字符串包含1个字节,则可以执行以下操作:
byteArray[i] = st[i].getbytes()[0];
答案 5 :(得分:0)
hexToInt应该是这样的
private static int hexToInt(char c1, char c2) {
return (Character.digit(c1, 16) << 4) + Character.digit(c2, 16);
}
否则CA在字节中返回AA。