Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将一组字符串转换为字节[]数组_Java_String_Bytearray_Byte - Fatal编程技术网

Java 将一组字符串转换为字节[]数组

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

我正在尝试将一组字符串转换为byte[]数组。首先,我会这样做,将字节数组转换为字符串:

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;ireturn((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*”愚蠢的我,是的,你是对的-一个完全不同的问题的正确答案;)谢谢你的提示。