Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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_Arrays - Fatal编程技术网

Java 将字符串转换为字节数组但保持相同的值

Java 将字符串转换为字节数组但保持相同的值,java,arrays,Java,Arrays,我想做的是,例如,假设我们有一个字符串,看起来像这样: String xyz = "1234567890"; 如何将该字符串对象转换为字节数组,使结果字节数组如下所示: [12,34,56,78,90] 我尝试过各种方法,从最基本的xyz.getBytes()到不同的编码,它们都只是给出一些随机值,尽管可能是正确的,但不是我想要的。尝试将字符串拆分为一个数组,类似于[“12”,34“…],并尝试将其转换为字节数组,但运气不佳 我不明白字符串是如何被转换的,或者有什么方法可以实现这一点吗?非常感

我想做的是,例如,假设我们有一个字符串,看起来像这样:

String xyz = "1234567890";
如何将该字符串对象转换为字节数组,使结果字节数组如下所示:

[12,34,56,78,90]

我尝试过各种方法,从最基本的xyz.getBytes()到不同的编码,它们都只是给出一些随机值,尽管可能是正确的,但不是我想要的。尝试将字符串拆分为一个数组,类似于[“12”,34“…],并尝试将其转换为字节数组,但运气不佳

我不明白字符串是如何被转换的,或者有什么方法可以实现这一点吗?非常感谢您提供的提示!谢谢!

publicstaticvoidmain(String[]args){
public static void main(String[] args) {
        String xyz = "1234567890";
        byte b[] = new byte[xyz.length() / 2];
        for (int i = 0; i < b.length; i++)
            b[i] = Byte.parseByte(xyz.substring(2 * i, 2 * i + 2));

        for (byte x : b) 
            System.out.println(x);
    }

->Use the substring method, notice that xyz.substring(0, 2) gives you the characters at index 0 and 1, not 2. The upper border is exclusive.

->Use parseByte
字符串xyz=“1234567890”; 字节b[]=新字节[xyz.length()/2]; for(int i=0;i使用substring方法,请注意xyz.substring(0,2)为您提供索引0和1处的字符,而不是2处的字符。上边框是独占的。 ->使用parseByte
按以下步骤操作:

import java.math.BigInteger;
import java.util.Arrays;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        // For decimal numbers
        String xyz = "1234567890";
        Byte[] arr = Arrays.stream(xyz.split("(?<=\\G..)")).map(Byte::parseByte).collect(Collectors.toList())
                .toArray(new Byte[0]);
        System.out.println(Arrays.toString(arr));

        // For haxadecimal numbers
        byte[] array = new BigInteger("A145BB5689", 16).toByteArray();
        System.out.println(Arrays.toString(array));
    }
}

注意:正则表达式
(?将字符串拆分为两对,并将其作为字节进行分析。编辑:对不起,我忘了提到字符串可以包含字母数字字符,例如“A145BB5689”,因此当打印字节[]时,它应该类似于[A1,45,BB,56…],几乎类似于字节[]的bytestring或字节[]的十六进制字符串@用户3973704-我已根据您更改的要求更新了我的答案。
字节[]
不能有
A1
,因为
字节可以有一个介于
-128到127
之间的数字,而
A1
=
161
[12, 34, 56, 78, 90]
[0, -95, 69, -69, 86, -119]