将一组字符串转换为byte 数组

我想将一组字符串转换为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()方法,它返回一个字节数组而不是一个字节,这是我的问题。

任何帮助将非常感激。

使用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; } 

这应该工作:

 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); } 

我不明白你为什么要尝试按字符获取这些字节。 getBytes()及其变体将立即为整个字符串提供byte []数组。 但是,如果你想看看字符是如何编码的,你的方法我很好,但是你必须记住,在一些编码中,一个字符可以编码为例如一到四个字节,因此你需要一个字节数组。字符。

如果您确定String足够小以适合一个字节,那么您可以这样做

 st[i].getBytes()[0]; 

但是,在大多数情况下,你的String可能会更大,所以在这些情况下它是不可能的……

如果您确定该字符串包含1个字节,则可以执行以下操作:

 byteArray[i] = st[i].getbytes()[0]; 

hexToInt应该是这样的

 private static int hexToInt(char c1, char c2) { return (Character.digit(c1, 16) << 4) + Character.digit(c2, 16); } 

否则CA以字节返回AA。