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]