Java 有符号整数到无符号字节,反之亦然

Java 有符号整数到无符号字节,反之亦然,java,byte,int,pixel,unsigned,Java,Byte,Int,Pixel,Unsigned,我有一个带符号的值,例如-7368817 当我将它转换为字节时,它将类似于:-113 我将其转换为无符号字节bye&0xff,它将类似于143 现在我操纵这个字节值,然后我想一路返回!获取新字节的有符号整数。:) 更新 整个故事: 我有一个8位深度和灰度的图像!这意味着所有像素都使用1字节表示 BufferedImage image = ImageIO.read(new File("my_grayscal_8bit_photo.jpg")); int intPixel = image.getR

我有一个带符号的值,例如-7368817 当我将它转换为字节时,它将类似于:-113 我将其转换为无符号字节bye
&0xff
,它将类似于143 现在我操纵这个字节值,然后我想一路返回!获取新字节的有符号整数。:)

更新

整个故事:

我有一个8位深度和灰度的图像!这意味着所有像素都使用1字节表示

BufferedImage image = ImageIO.read(new File("my_grayscal_8bit_photo.jpg"));

int intPixel = image.getRGB(1, 1);
现在我需要对这个像素进行一些位处理,但由于它是int,我必须首先将它转换为byte:

byte bytePixel = (byte) intPixel;
并将其取消签名:

int intPixel2 = bytePixel & 0xff;
现在我执行位操作,并希望将其转换为int,然后执行以下操作:

image.setRGB(1, 1, neworiginalint);

您是否在询问如何操作有符号整数中的最低有效字节,而不触及较高有效字节?
可以这样做:

int i = -7368817; // 0xFF8F 8F8F
int b = i & 0xFF; // "signed byte", = 0x8F = 143
b += 0x2C; // your manipulation, result = 0xBB
i = (i & 0xFFFFFF00) | (b & 0xFF); // result of LSB modification = 0xFF8F8FBB
或者在一个步骤中:
i=(i&0xffff00)|((i+0x2C)&0xFF)如果这是一个简单的操作

如果操作无法产生溢出,您只需在整个int:

i^=0x34;//i=0xff8f8f8fbb

您是否在询问如何操作有符号整数中的最低有效字节,而不触及较高有效字节?
可以这样做:

int i = -7368817; // 0xFF8F 8F8F
int b = i & 0xFF; // "signed byte", = 0x8F = 143
b += 0x2C; // your manipulation, result = 0xBB
i = (i & 0xFFFFFF00) | (b & 0xFF); // result of LSB modification = 0xFF8F8FBB
或者在一个步骤中:
i=(i&0xffff00)|((i+0x2C)&0xFF)如果这是一个简单的操作

如果操作无法产生溢出,您只需在整个int:
i^=0x34;//i=0xFF8F8FBB

该方法始终在颜色模型中返回一个
int
像素。要手动提取像素的红色、绿色、蓝色和alpha值,可以执行以下操作:

int pixel = image.getRGB(1, 1);
int a = (pixel >> 24) & 0xFF;
int r = (pixel >> 16) & 0xFF;
int g = (pixel >> 8) & 0xFF;
int b = pixel & 0xFF;
或者为了方便而使用构造函数(以性能为代价)。一旦您操纵了红色、绿色、蓝色和alpha值(范围为0到255),您可以将它们重新组合回
int
,以设置像素:

int newPixel = (a << 24) | (r << 16) | (g << 8) | b;
int-newPixel=(a该方法始终返回颜色模型中的
int
像素。要手动提取像素的红色、绿色、蓝色和alpha值,可以执行以下操作:

int pixel = image.getRGB(1, 1);
int a = (pixel >> 24) & 0xFF;
int r = (pixel >> 16) & 0xFF;
int g = (pixel >> 8) & 0xFF;
int b = pixel & 0xFF;
为方便起见,也可以使用构造函数(以性能为代价)。一旦操作了红色、绿色、蓝色和alpha值(范围为0到255),就可以将它们重新组合回
int
以设置像素:

int newPixel = (a << 24) | (r << 16) | (g << 8) | b;

intnewpixel=(我假设您知道java没有无符号类型(除了char)一个字节只能容纳256个值,即2^8作为它的8位。如果你想使用字节作为无符号,你就不会从Java得到太多帮助。从字节到int的最后一次转换结果应该是什么?由于字节的整个值范围适合int,它仍然是143?通过这种转换你到底想做什么?顺便问一下:什么如果你能把所有可能的值都放进一个1字节的
字节
;中,那么就有了一个4字节的
int
;)我知道Java没有无符号类型,所以我把无符号字节放在int中。我假设你知道Java没有无符号类型(除了char)一个字节只能容纳256个值,即2^8作为它的8位。如果你想使用字节作为无符号,你就不会从Java得到太多帮助。从字节到int的最后一次转换结果应该是什么?由于字节的整个值范围适合int,它仍然是143?通过这种转换你到底想做什么?顺便问一下:什么如果你能把所有可能的值都放入一个1字节的
byte
;)中,那么就有了一个4字节的
int
;)我知道Java没有无符号类型,所以我把无符号字节放在int中。