我正致力于将现有的C#项目转换为Java / Android。我正在寻找相当于UTF8Encoding.GetBytes(String, Int32, Int32, Byte[], Int32)的Java。看一下下面的C#代码,如何将字符串数据包添加到数据字节数组中?我查看了String.getBytes()方法,但它不一样。
int length = packet.Length;
byte[] data = new byte[6 + length + 1];
data[0] = (byte)VAR1;
data[1] = 1;
**Encoding.UTF8.GetBytes(packet, 0, length, data, 6);**
data[6 + length] = (byte)VAR2;
data[5] = (byte)(length % 256);
length /= 256;
data[4] = (byte)(length % 256);
length /= 256;
data[3] = (byte)(length % 256);
length /= 256;
data[2] = (byte)(length % 256);
答案 0 :(得分:1)
好的,鉴于你的意思是ASCII而不是UTF-8,有两个直接的选择:
中间字节数组
byte[] encodedText = text.getBytes(StandardCharsets.US_ASCII);
System.arraycopy(encodedText, 0, data, 6, encodedText.length);
效率低,但很简单。
Charset直接
CharsetEncoder encoder = StandardCharsets.US_ASCII.newEncoder();
CharBuffer charBuffer = CharBuffer.wrap(text);
ByteBuffer byteBuffer = ByteBuffer.wrap(data, 6, data.length - 6);
encoder.encode(charBuffer, byteBuffer, true);
这可能可能更有效,但理解起来更复杂。