将Java的byte[]解释为字符串

20 浏览
0 Comments

将Java的byte[]解释为字符串

我有一个字节数组b:

b = [-98, -99]

我需要将这段数据传递给一个函数。该函数需要一个字符串(不能更改)。如何让Java将b中的原始二进制数据解释为字符串,而不改变b中的任何位?

编辑

这不是重复的:

Converting byte array to String (Java)

因为数组b由位[1001 1110 1001 1101]或[9E9D]组成。如果我使用

String str = new String(b, "Cp1252")

Cp1252编码没有该位序列1001 1101或9D的值。因此,此函数的结果为str =“ž?”。二进制形式为[1001 1110 0011 1111]或[9E3F]。请注意,该函数已更改了我的位,这基本上损坏了我的数据。

我认为在C++中会使用reinterpret cast来完成这项工作,但在java中不存在这样的东西。谢谢。

admin 更改状态以发布 2023年5月21日
0
0 Comments

您无法使用任意值的任意字节进行此操作,因为没有任何编码可以允许此操作,并且我假设您无法控制数据的解码。如果您不仅可以控制编码,还可以控制解码,那么您可以编写自己的字符集,以便将数据映射到正常的Java字符串中,并将其作为UTF-16进行编码。 进行编码:

String str = new String(byteBuffer, MyCharSet);

进行解码:

byte[] byteBuffer = str.getBytes(MyCharSet);

0
0 Comments

你可能想要像 new String(b, "charset")); 这样的写法,其中 charset 被替换为你想要使用的编码方式。我建议使用 UTF-8,但你的值不是有效的 UTF-8 编码。

0