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

Java字符串到字节的转换是不同的,java,string,byte,Java,String,Byte,全部 我有一个关于向服务器发送字节数组的问题 每个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

全部

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

每个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],将字符串转换为十进制。

该方法返回一个
字节,作为元素添加到
缓冲区
数组中

字符串
“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));
请注意,当
char
值超过
byte
可容纳的值范围时,此解决方案可能无法像您预期的那样工作

import java.nio.ByteBuffer;
 ...

    ByteBuffer buffer2 = ByteBuffer.allocate(10);
    buffer2.put(STX);
    buffer2.put(ID.getBytes());
    buffer2.put(A);
    buffer2.put(NUL);
    buffer2.put(ETX);
    buffer2.put(CR);
    buffer2.put(LF);

    byte[] data = buffer2.array();
    buffer2.clear();
import java.nio.ByteBuffer;
 ...

    ByteBuffer buffer2 = ByteBuffer.allocate(10);
    buffer2.put(STX);
    buffer2.put(ID.getBytes());
    buffer2.put(A);
    buffer2.put(NUL);
    buffer2.put(ETX);
    buffer2.put(CR);
    buffer2.put(LF);

    byte[] data = buffer2.array();
    buffer2.clear();