Java中的byte

很郁闷  一段很简单的代码  把ARGB转为RGBA,结果图像颜色偏红。

搞了很久,才知道问题出在了byte身上。

一个颜色分量8位,想当然的用了byte,组合成一个像素32位,就是

(r<<24)|(g<<16)|(b<<8)|(a)

问题就出在了byte到int的转换上

byte在Java中是有符号的 (win32中是unsigned char)

这样0xFF转成int就变成0xFFFFFFFF  (-1)

也就是说如果蓝色  b=0xFF的话, 这样转化过后颜色就变为白色了

如果是绿色的话  就变黄色了

 

不知道Java在设计时怎么想的,byte为无符号才更加贴合我们的需要

 

### Java `Byte` 类方法详解 #### 1. **概述** 在 Java 中,`Byte` 是一个包装器类 (Wrapper Class),用于将原始数据类型 `byte` 封装为对象。它位于 `java.lang` 包中[^3]。 以下是 `Byte` 类的一些主要功能和方法: --- #### 2. **构造函数** - **`Byte(byte value)`**: 创建一个新的 `Byte` 对象,其值等于指定的字节值。 - **`Byte(String s)`**: 使用字符串参数创建新的 `Byte` 对象。如果字符串无法解析为有效的字节数,则抛出 `NumberFormatException`。 示例代码如下: ```java // 构造函数演示 Byte byteObject1 = new Byte((byte) 10); System.out.println("Value using constructor: " + byteObject1); try { Byte byteObject2 = new Byte("127"); System.out.println("Parsed String to Byte: " + byteObject2); } catch (NumberFormatException e) { System.err.println("Invalid number format."); } ``` --- #### 3. **静态常量** - **`MAX_VALUE` 和 `MIN_VALUE`**: 表示 `byte` 数据类型的范围。 - `MAX_VALUE`: 最大值为 127。 - `MIN_VALUE`: 最小值为 -128。 示例代码: ```java System.out.println("Maximum Value of Byte: " + Byte.MAX_VALUE); // 输出 127 System.out.println("Minimum Value of Byte: " + Byte.MIN_VALUE); // 输出 -128 ``` --- #### 4. **换方法** - **`parseByte(String s)`**: 将给定的字符串解析为有符号的 `byte` 值。 - **`valueOf(String s)`**: 返回保存指定字符串值的 `Byte` 实例。 - **`toString()`**: 返回该字节值的字符串表示形式。 示例代码: ```java String str = "100"; byte parsedByte = Byte.parseByte(str); System.out.println("Parsed Byte from string: " + parsedByte); Byte byteObj = Byte.valueOf(str); System.out.println("Byte object created via valueOf(): " + byteObj.toString()); ``` --- #### 5. **比较与判断** - **`compareTo(Byte anotherByte)`**: 比较两个 `Byte` 对象的大小。 - **`equals(Object obj)`**: 判断当前 `Byte` 是否与其他对象相等。 示例代码: ```java Byte b1 = 10; Byte b2 = 10; int comparisonResult = b1.compareTo(b2); if (comparisonResult == 0) { System.out.println("b1 and b2 are equal."); } boolean isEqual = b1.equals(b2); System.out.println("Are b1 and b2 equal? " + isEqual); ``` --- #### 6. **其他实用方法** - **`decode(String nm)`**: 解码指定的字符串并返回相应的 `Byte` 值。 - **`getBytes(String charsetName)`**: 虽然此方法不属于 `Byte` 类,但它可以用来处理字符编码问题[^1]。 示例代码: ```java Byte decodedByte = Byte.decode("127"); System.out.println("Decoded Byte: " + decodedByte); ``` --- ### 总结 通过上述介绍可以看出,`Byte` 类提供了丰富的工具来操作和封装 `byte` 数据类型。无论是数值解析还是对象比较,都可以借助这些方法实现高效开发。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值