gpt4 book ai didi

大字节的java Inputstream然后是127

转载 作者:太空宇宙 更新时间:2023-11-04 12:53:00 28 4
gpt4 key购买 nike

我有一个在发送字节 (0x30 0x98 0xa7 ...) 的微芯片上运行的 C++ 程序。我在一个 Android Java 应用程序中接收它们,它将这些字节以十六进制形式写入 TextView 。

但是当微芯片发送大于 127 的值时(例如:字符 á),我的 TextView 显示意外的十六进制值(例如:ffffffc3 ffffffa1)。这是个问题,因为我想要像 0xa0 这样的值。所以我在值大于 127 时尝试了这个:

pole[i] = receive_bytes[i] & 0xff;

但是我得到:0xc3 0xa1,但是 textview 仍然不能正确显示只有 1 个字节:0xa0

这是我的接收代码:

if(input.available() != 0)
{
input.read(receive_bytes); //receive_bytes is array byte
}

最佳答案

这是一个 unicode 编码问题。

character áiso8859 中编码为 0xE1字符集。所以它的值225大于127。

在unicode中,它被编码为相同的值0x000000E1。它可以使用 UTF-32 或 UTF-16 编码作为单个字符处理,因此使用 32 位或 16 位表示。

相同的 unicode 字符在 UTF-8 中使用 8 位表示进行编码具有两个连续字节的序列:0xC3 0xA1。值介于 0x80 和 0xFF 之间的任何 unicode 字符都将被转换为两个不同的字符。一些较大的 unicode 字符可以拆分为更多字节,因为 UTF-8 是一种可变长度编码。

不幸的是,很难提供更精确的诊断,因为您不清楚您如何发送数据,也不清楚您如何接收数据。但是,如果您在 C++ 端使用 8 位 8859 编码,则应在 Java 端使用 appropriate charset 打开具有相同编码的流​​。 opening the stream时的参数.

即使您的 Java 字符串中有正确的值,TextView 仍然可能存在问题,它默认使用 UTF-8。您可以在 this other StackOverflow answer 中找到此问题的解决方案。 .

关于大字节的java Inputstream然后是127,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48060130/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com