Java 将一组字符串转换为字节[]数组
我正在尝试将一组字符串转换为byte[]数组。首先,我会这样做,将字节数组转换为字符串:Java 将一组字符串转换为字节[]数组,java,string,bytearray,byte,Java,String,Bytearray,Byte,我正在尝试将一组字符串转换为byte[]数组。首先,我会这样做,将字节数组转换为字符串: public String convertByte(byte[] msg) { String str = ""; for(int i = 0; i < msg.length; i++) { str += (msg[i] + " * "); } return str; } publicstringconvertbyte(by
public String convertByte(byte[] msg) {
String str = "";
for(int i = 0; i < msg.length; i++) {
str += (msg[i] + " * ");
}
return str;
}
publicstringconvertbyte(byte[]msg){
字符串str=“”;
对于(int i=0;i
当我试图转换回byte[]数组时,得到的值与转换为字符串时的值不一样。我本来有一些东西给了我不正确的值
我目前正在尝试以下几点:
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;
}
公共静态字节[]convertStr(字符串ln)
{
系统输出打印项次(项次);
字符串[]st=ln.split(“*”);
byte[]byteArray=新字节[23];
对于(int i=0;i
如果我尝试使用String api中的getbytes()方法,它将返回一个字节数组而不是一个字节,这就是我的问题
任何帮助都将不胜感激。我不明白您为什么要尝试按字符获取这些字节。 getBytes()及其变体将立即为整个字符串提供一个byte[]数组。 但是,如果您想了解字符是如何编码的,您的方法可能很好,但您必须记住,在某些编码中,一个字符可以编码为一到四个字节,因此您需要为每个字符设置一个字节数组。这应该可以:
byte[] bytes = "Hello World".getBytes("UTF-8");
String hello = new String(bytes, "UTF-8");
上面的示例使用UTF-8编码,只是作为一个示例。使用您希望在消息输入中使用的字符编码。(这个“答案”不是对这个问题的回答…)
编辑
所以我们需要从byte[]到String再到byte[]的转换。me123在值之间(和前面)添加了分隔符。正如其他人已经解释的那样,
1.拆分的regexp必须是“\\*”
和
2.神奇的方法是Byte.parseByte(st[i])
这里是一个不使用分隔符但固定字节项宽度的替代方法。StringToByte转换器显示了一个基于字符串字符数组的非常快速的解决方案
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);
}
publicstaticstringconvertbyte(byte[]msg){
StringBuilder sb=新的StringBuilder();
for(字节b:msg){
sb.append(字符串格式(“%02x”,b));
}
使某人返回字符串();
}
公共静态字节[]convertStr(字符串项次)
{
系统输出打印项次(项次);
char[]chars=ln.toCharArray();
字节[]结果=新字节[ln.length()/2];
for(int i=0;i return((c1如果您确定字符串足够小,可以放入一个字节,您可以这样做
st[i].getBytes()[0];
但是,在大多数情况下,您的字符串可能会更大,因此在这些情况下不可能…使用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;
}
公共静态字节[]convertStr(字符串ln)
{
系统输出打印项次(项次);
字符串[]st=ln.split(“*”);
byte[]byteArray=新字节[23];
对于(int i=0;i
如果您确定字符串包含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);
}
private static int hexToInt(字符c1、字符c2){
return(Character.digit(c1,16)getBytes()有什么问题?你得到一个字节数组,但这是你想要的,或者不是?你不能将字符串转换为单个字节,因为一个字节比大多数字符串小…他想将一组字符串转换为一个字节数组,而不是单个字符串。不,这不起作用,因为他使用自己的函数将字节数组转换为字符串,例如{0,1,2,3}->“0*1*2*3*”愚蠢的我,是的,你是对的-一个完全不同的问题的正确答案;)谢谢你的提示。