【问题标题】:java byte vs c++ BYTEjava字节与c++字节
【发布时间】:2012-10-31 13:31:37
【问题描述】:

我知道 Java byte 的范围是 -128 到 127,但 C++ BYTEunsigned char(0 到 255。)

我想将 C++ 函数转换为 Java,在 C++ 中我有一个 LPBYTE(它是一个指向 BYTE 数组的指针。)我尝试在 C++ 中使用 byte 数组而不是 LPBYTE函数,但我的 Java 函数仍然无法正常工作。

我的 C++ 函数适用于 BMP 文件,它的算法是自定义运行长度编码。在将其转换为 Java 时,我使用BufferedImage 并将其内容作为byte[] 获取。我猜 Java 函数由于类型不匹配而无法正常工作。

我应该在 Java 中使用哪种类型?

【问题讨论】:

  • C++ 中没有标准类型BYTE。这是一个typedef/define,通常是unsigned char,但到目前为止可能是char

标签: java c++ image-processing run-length-encoding


【解决方案1】:

在 Java 中,您可以使用普通的 byte 并根据需要使用 b & 0xFF 转换为 int

您遇到的问题是 Java 不支持指针,您无法将指向字节的指针传递给 Java。最接近的等价物是byte[]

如果您只进行 RLE 编码,则字节的实际值并不重要,因此它们是有符号还是无符号都无关紧要。如果您正在解码 BMP 文件,您可以根据需要使用上述掩码。

读取/写入字节数组时,常见的解决方案是使用 ByteBuffer。这支持以 little endian 或 big endian 顺序编写较长的类型,例如 shortint,您无需提前知道确切的长度。

【讨论】:

    【解决方案2】:

    Java 没有无符号类型(char 除外,它是 16 位)。所以你别无选择,选择byte,但重写你的代码,使其适用于有符号整数。如果您需要这方面的帮助发布代码

    【讨论】:

      【解决方案3】:

      Java 中没有无符号字节类型。您可以改用short。这可以表示从 0 到 255 的所有值,甚至更多。

      【讨论】:

      • 实际上我必须使用 BufferedImage ,因为我正在使用 ByteArrayOutputStream 来获取文件内容并且它正在返回 byte[] 所以我必须逐字节读取内容并将其转换为 short ,对吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 2013-02-12
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多