gpt4 book ai didi

Java 字符串到字节的转换是不同的

转载 作者:搜寻专家 更新时间:2023-11-01 03:06:52 26 4
gpt4 key购买 nike

全部

我有一个关于将字节数组发送到服务器的问题。

每个 ID 都有文本值。

private String ID = "0001";
byte STX = (byte)0x02;
byte A = (byte)0x41;
byte NUL = (byte)0x00;
byte ETX = (byte)0x03;
byte CR = (byte)0x0D;
byte LF = (byte)0x0A;
byte[] buffer = { STX, Byte.decode(ID), A, NUL, ETX, CR, LF };

我期望缓冲区值

buffer [02, 48, 48, 48, 49, 65, 00, 0D, 0A]

但是缓冲区值有

buffer [02, 01, 65, 00, 0D, 0A]

如何将“0001”转换为[48,48,48,49],字符串转十进制。

最佳答案

方法Byte#decode(String)返回一个 Byte 作为元素添加到您的 buffer 数组。

字符串 "0001" 表示八进制值 0001,即 1

您将无法在 { } 初始化符号中使用一个变量添加多个数组元素。

相反,您可以执行以下操作

String ID = "0001";
byte STX = (byte) 0x02;
byte A = (byte) 0x41;
byte NUL = (byte) 0x00;
byte ETX = (byte) 0x03;
byte CR = (byte) 0x0D;
byte LF = (byte) 0x0A;
List<Byte> bytes = new ArrayList<Byte>();
bytes.add(STX);
for (char c : ID.toCharArray()) {
bytes.add((byte)c);
}
bytes.addAll(Arrays.asList(A, NUL, ETX, CR, LF));

Byte[] buffer = (Byte[]) bytes.toArray(new Byte[0]);
System.out.println(Arrays.toString(buffer));

打印

[2, 48, 48, 48, 49, 65, 0, 3, 13, 10]

请注意,当 char 值超过 byte 可以容纳的值范围时,此解决方案可能无法按预期工作。

关于Java 字符串到字节的转换是不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19394883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com