使用带符号的字节将字节转换为字符串

时间:2014-03-08 19:19:11

标签: java

在将字符串转换为字符串时,有没有办法保留有符号字节?或者在转换为字符串时将它们视为无符号?

以下是我的代码:

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。我假设问题是从字节到带负数的字符串的转换。如果情况不是这样,请告诉我。否则我该如何解决这个问题?

2 个答案:

答案 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];