`
xiaolongfeixiang
  • 浏览: 236850 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Java中的Byte转为无符号的Integer

阅读更多

Java的Byte都是有符号的(singed),而Byte又是8位的,如何转为无符号( unsigned)的呢?

 

素材:

byte   a=11010110 (singed : -42  、 unsigned :214)

 

尝试:

方法一:直接转-- (int)a (失败)

 

转换前 11010110


(转换,牵涉到符号位的扩展。因为扩展前符号位是1,所以扩展后,高位都是1)


转换后 11111111 11111111 11111111  11010110 ( - 42 )

 

原码--- 补码 转换

各位取反,在加1,转换成 原码
             11111111 11111111 11111111 11010110
(符号) 负

(取反) 00000000 00000000 00000000 00101001

(加1 ) 00000000 00000000 00000000 00101010
 

方法二:通过IO流 (成功)

 

   我常用IO流来进行一些 进制的转换 。   O(∩_∩)O~

 

import java.io.ByteArrayInputStream;

public class Test{

    public static void main(String[] args) {

    	byte[] bytes =  new byte[]{(byte)-42};
    	
    	ByteArrayInputStream in = new ByteArrayInputStream(bytes);
    	
    	int result = in.read();
    	System.out.println("无符号数: \t"+result);
    	System.out.println("2进制bit位: \t"+Integer.toBinaryString(result));
    }
}

    输出

无符号数:    214
2进制bit位: 11010110
 

  方法三:当然是看看 ByteArrayInputStream 的源码了。

 

    ByteArrayInputStream的read源码:

    public synchronized int read() {
	           return (pos < count) ? (buf[pos++] & 0xff) : -1;
    }

    原来是 & 运算呀!!!

 

   修改IO的方式的写法:

public class Test{

    public static void main(String[] args) {

    	byte bytes = -42;
    	
    	int result = bytes&0xff;
    	System.out.println("无符号数: \t"+result);
    	System.out.println("2进制bit位: \t"+Integer.toBinaryString(result));
    }
}

 

    稍微解释一下:

    (byte) -42 & 0xff 

      STEP01:(byte)-42 进行扩展:

      11111111 11111111 11111111  11010110

 

 

    STEP02:与运算:

      00000000 00000000 00000000 11111111  ( 0xff 也是 0x000000ff)

       &

    11111111 11111111 11111111 11010110  

 

      结果:

      00000000 00000000  00000000 11010110 (即是整数214)

 

 

    之所以会弄这个古怪的的问题,是因为我想得到中文字符串的byte流的二进制形式。想窥探一下不同的编码集的异同。

 

    记录一下: 读JDK源码,很有收获!!

4
0
分享到:
评论
2 楼 xiaolongfeixiang 2010-05-26  
qipei 写道
用的着这么麻烦么?

举个例子:
240 肯定超过java里 byte的范围了吧?
先把240转成16进制 然后付给byte就行了么
240的16进制是F0;
byte a = (byte)0xF0;


这样的结果是 -16 。

我的意思将 byte形的 -16 转成 无符号的 240.

PS: 我是经过推理验证,最后找的这个方法;

int a = -16 &0xff;

1 楼 qipei 2010-05-26  
用的着这么麻烦么?

举个例子:
240 肯定超过java里 byte的范围了吧?
先把240转成16进制 然后付给byte就行了么
240的16进制是F0;
byte a = (byte)0xF0;

相关推荐

    mybatis逆向工具generator,中文注释,Byte改Integer

    在Java编程中,`Byte`和`Integer`都是表示整数的数据类型。`Byte`占用一个字节(8位),取值范围为-128到127,而`Integer`则占用四个字节(32位),取值范围大大扩展至-2^31到2^31-1。在实际开发中,如果数据库字段...

    java byte相互转换详解左右位移

    在Java中,byte是一个8位的有符号整型数据,它的取值范围是-128到127。int是一个32位的有符号整型数据,取值范围是-2,147,483,648到2,147,483,647。由于byte与int的数据位数不同,转换时需要进行特定的处理。 **...

    java基本类型与byte数组互相转换.pdf

    Java 中的基本类型与 byte 数组之间的转换是非常重要的,以下是关于 Java 基本类型与 byte 数组互相转换的相关知识点: 1. short 类型转换成 byte 数组 在 Java 中,short 类型是 16 位的整数类型,而 byte 数组是...

    JAVA转byte[]为int,long,double

    在Java中,一个`int`型数据占用4个字节(32位)。因此,从`byte[]`转换到`int`,我们需要确保数组长度至少为4,并按照字节顺序(通常为大端或小端)正确组合字节。这里我们假设默认的大端序: ```java public ...

    学习文档_JAVA中Integer和Byte转换.doc

    本文档主要探讨了如何在Java中实现这两种数据类型的转换,包括有符号和无符号的转换。 首先,Integer在Java中占用4个字节(32位),其中最高位作为符号位。如果最高位是1,表示这是一个负数;如果是0,则表示正数。...

    java byte转换工具类

    用于java,byte与各种对象的转换,Integer、short、hex、string

    C# byte转为有符号整数实例

    在C#中,`byte`类型是一个无符号8位整数,其取值范围是0到255。而`int`则是一个有符号32位整数,范围为-2^31到2^31-1。由于`byte`是无符号的,它无法直接表示负数,因此在处理温度等可能为负的数值时,我们需要通过...

    Java将图片转换为byte数组例子总结

    在Java编程中,经常需要处理图像数据,特别是在网络传输或存储时,将图像转换为`byte`数组是一种常见的做法。这不仅可以提高传输效率,还可以方便地进行存储。本文将详细介绍如何使用Java将图片转换为`byte`数组以及...

    java数据类型转byte数组

    ip地址转4字节byte,char转2字节byte,byte数组转char,int整数转换为4字节的byte数组,byte数组转换为int整数,double类型转8字节数组,8位数组转...byte数组转换为无符号short整数,byte数组转换为无符号short整数

    Java byte数组与其他类型转换

    在Java中,byte数组可以被用来存储short类型的值,因为一个short占用两个字节。`putShort`和`getShort`方法用于在字节数组中写入和读取short值。这两个方法内部都采用了位移操作来完成转换。例如,`putShort`方法...

    Byte2ToInteger.rar

    VB中的Integer数据类型通常占用2字节,与C中的short或int相当,而VB的UInteger或Long数据类型可能对应C中的无符号整数(unsigned int)或长整数(long)。因此,"2字节装换为1个整数"可能指的是将两个VB的Integer...

    java中两个byte数组实现合并的示例

    本文将深入探讨如何在Java中实现两个`byte`数组的合并,以及一些相关的操作,如数组反转和加密。 首先,我们来看一下标题和描述中提到的示例代码。这个简单的函数`addBytes`接收两个`byte`类型的数组`data1`和`data...

    S7-200SMART PLC中无符号数据转换+比较+运算(子程序可重复调用).zip

    为了更好地理解这些概念,可以参考"**S7-200SMART PLC中无符号数据转换+比较+运算(子程序可重复调用)**"这个压缩包文件中的示例程序。这个文件可能包含了具体的梯形图代码和注释,通过实例展示了如何在实际应用中...

    java中字节数组拼接

    使用链式编程写法实现Java中byte数组的拼接。例如byte[] bytes = ByteUtils.get().add(0x41).add(07).add(11).add("15288930000").add(0x45).toArray();更灵活用法请参考Mybytes

    java中把对象转化为byte数组的方法.doc

    java中把对象转化为byte数组的方法 Java 中将对象转化为 byte 数组的方法是指将 Java 对象序列化为二进制数据流,以便在网络上传输或存储。这种方法可以应用于各种领域,如分布式计算、网络通信、数据存储等。 在 ...

    转换Image数据为byte数组

    下面,我们将深入探讨如何在Java中实现图像数据与字节数组之间的相互转换,并分析这一过程中的关键步骤和技术细节。 ### 转换Image数据为byte数组 #### 方法一:`imageToBytes`函数解析 在Java中,将`Image`对象...

    Java String与Byte类型转换

    在Java编程中,String对象和Byte...总之,Java中的String与Byte类型的转换是编程中不可或缺的部分,尤其在网络编程中,理解这两种类型之间的转换方式及其在网络数据交换中的作用,对于编写高效、可靠的程序至关重要。

    Java中3DES加密解密示例(封装byte数组16进制互转)

    我们使用 Java 的 Integer.toHexString 方法来将 byte 数组中的每个元素转换为 16 进制字符串,并使用 StringBuilder 来拼接这些字符串。 在 hex2Byte 方法中,我们将 16 进制字符串转换回 byte 数组。我们使用 ...

    Java 中 char 与 byte 的区别

    ### Java中的char与byte的区别详解 #### 一、引言 在Java编程语言中,`char` 和 `byte` 是两种基本的数据类型,它们分别用于处理字符和数值数据。尽管这两种类型都用来存储数据,但它们之间存在着显著的差异。本文...

Global site tag (gtag.js) - Google Analytics