我知道Java byte
范围是-128到127,但C ++ BYTE
是unsigned char
(0到255)。
我想将C ++函数转换为Java,在C ++中我有一个LPBYTE
(指向BYTE
数组的指针。)我尝试使用byte
数组代替在C ++函数中LPBYTE
,但我的Java函数仍然无法正常工作。
我的C ++函数适用于BMP文件,它的算法是自定义的运行长度编码。在将其转换为Java时,我使用BufferedImage
并将其内容设为byte[]
。我猜测由于类型不匹配,Java函数无法正常工作。
我应该在Java中使用哪种类型?
答案 0 :(得分:6)
在Java中,您可以使用普通byte
并根据需要转换为int
b & 0xFF
您遇到的问题是 Java不支持指针,您无法将指向字节的指针传递给Java。最近的等价物是byte[]
。
如果您只进行RLE编码,则字节的实际值并不重要,因此无论是有符号还是无符号都无关紧要。如果要解码BMP文件,可以根据需要使用上面的掩码。
读取/写入字节数组时,常见的解决方案是使用ByteBuffer。这支持以小端或大端顺序编写较长类型,例如short
或int
,并且您无需事先知道确切的长度。
答案 1 :(得分:1)
Java没有无符号类型(除char
之外是16位)。所以你别无选择,选择byte
但重写代码,以便它可以使用有符号整数。如果您需要有关此的帮助,请发布代码。
答案 2 :(得分:1)
Java中没有无符号字节类型。您可以使用short
代替。这可以表示0到255之间的所有值,等等。