gpt4 book ai didi

java - Java 中的按位运算符作用于两个字节

转载 作者:行者123 更新时间:2023-12-02 01:11:35 27 4
gpt4 key购买 nike

这应该很简单,但我在更改一些使用按位运算符并转换为 Java 的 C 代码时遇到了麻烦。

在 C 中我有:

unsigned short Color(byte r, byte g, byte b)
{
return( ((unsigned short)g & 0x1F )<<10 | ((unsigned short)b & 0x1F)<<5 | (unsigned short)r & 0x1F);
}

此函数 Color 返回 16 位,其中 15 位代表红色、绿色和蓝色 channel 的三个 5 位值。我正在尝试在 Java 中做类似的事情,但我在数据类型方面遇到了问题。

在java中我有:

int r=someval, g=anotherval, b=yetanotherval;

我想将这些整数转换为 2 字节数据类型,并使用与上面相同的按位/移位操作。

解决这个问题的最佳方法是什么?我正在考虑一个 2 字节数组,但这似乎没有必要。

编辑

所以我用 Java 尝试了一下,但似乎仍然有问题。我从简单开始:

short r=someval, g=anotherval, b=yetanotherval;
short colorData = g & 0x001F;

但是编译器提示:“无法从 int 转换为短整型”

最佳答案

Java 中也有 short 类型,但它始终是有符号的,Java 中没有无符号类型。

因此,最好使用 int,这样您就不需要使用符号位来保存实际的颜色数据,这可能会有点(没有双关语!)令人困惑.

这应该作为一个起点,至少:

int Color(int r, int g, int b)
{
return ((g & 0x1F) << 10) | ((b & 0x1F) << 5) | (r & 0x1F);
}

为了简单起见,我也将参数设置为 int

更新: 听起来(并且看起来)好像您实际上可以使用 short,因为颜色格式只需要 15 位。那么我们就这样做吧:

short Color(short r, short g, short b)
{
return ((g & 0x1F) << 10) | ((b & 0x1F) << 5) | (r & 0x1F);
}

我还没有尝试编译上面的内容,但您可能会遇到转换错误,并且需要在整个过程中添加显式的 short 转换才能编译。

关于java - Java 中的按位运算符作用于两个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4155482/

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