在将字符串转换为字符串时,有没有办法保留有符号字节?或者在转换为字符串时将它们视为无符号?
以下是我的代码:
byte[] encodedBytes = new byte[RX_Index];
System.arraycopy(RX_Buffer, 0, encodedBytes, 0, encodedBytes.length);
final String data = new String(encodedBytes);
RX_Buffer将包含0xBF,即-65 signed decimal。初始化数据后,由于某种原因转换为字符串后,0xBF字节更改为0xFFFD。我假设问题是从字节到带负数的字符串的转换。如果情况不是这样,请告诉我。否则我该如何解决这个问题?
答案 0 :(得分:2)
字节是8位有符号类型。 char是16位无符号类型。
该String构造函数将给定字节视为在default character encoding上编码的字符数据 - 在Android上为UTF-8。它会将这些字节转码为UTF-16。与原始编码中的有效值或序列不匹配的任何内容都将替换为the replacement string。
因此,与某些语言不同,Java Strings不是二进制安全的。如果需要将数据存储为字符串,请考虑使用Base64编码值。
答案 1 :(得分:1)
你的android BlootoothSocket
(方法read(byte[])
)将为你提供一个包含二进制数据的字节数组。
请勿将该数据转换为字符串。
如果您希望将二进制数据解释为整数,请使用以下代码:
int myFirstValue = encodedBytes[0];