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

分享到:

2010-04-20 19:42

浏览 34673

评论

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;

java byte to integer_Java中的Byte转为无符号的Integer相关推荐

  1. c#中的long类型示例_C#中带示例的无符号字节数组

    c#中的long类型示例 C#中的无符号字节数组 (Unsigned Byte Array in C#) In C#.Net, we can create an unsigned byte array ...

  2. java将byte转为无符号字节——解决java没有unsigned byte问题

    在使用代码和硬件通讯时,通常碰到c++中使用无符号字节unsigned byte 进行数据发送与接受,但JAVA没有无符号字节,怎么把131(java的字节只能存 -128 ~127 )发送给机器呢, ...

  3. java string与integer_Java中Integer和String浅谈

    http://qxzxcjq-126-com.iteye.com/blog/883283 Java中的基本数据类型有八种:int.char.boolean.byte.long.double.float ...

  4. java 发票打印_Java发票打印CommPortIdentifier与无符号字节的问题

    嘿, 我需要在热敏发票打印机中打印发票 我写了这个程序来做到这一点(见下文) 但是,由于本地化的原因,我需要发送给打印机的字符值范围为0x80 - 0x102,但我发现它是不可能的,因为我不能发送一个 ...

  5. java date 转integer_java 中Date的各种格式转换

    把java.util.Date格式的时间转为java.sql.Date格式的时间 java.sql.Date sqldate = new java.sql.Date(date.getTime()); ...

  6. c语言 char memcpy,在C中使用memcpy复制无符号字符数组

    int n=50; 假设你在32位机器上,'n'将是一个4字节的值. N = 0x00000032 = 00000000B 00000000B 00000000B 00110010b unsigned ...

  7. java的左移位()和右移位()和无符号右移()

    1.左移     ->左移运算符"<<" - 使指定值的所有位都左移规定的次数.     ->左移m<<n 代表把数字m在无溢出的前提下乘以2的 ...

  8. C的无符号数据类型int,short,byte 转为 Java对应的数据long,char,short

    //从网络中读取C的无符号int,short,byte字节数组,相应转换成java的long,char,short short anUnsignedByte = 0; char anUnsignedS ...

  9. java byte 无符号类型_获取java byte的无符号数值

    byte a = (byte)234; System.out.println(a); 上面的代码,结果是-22,因为java中byte是有符号的,byte范围是-128~127. 如果想输出234,该 ...

最新文章

  1. 51CTO手機軟件有病毒? 有網絡安全的高手嗎?
  2. 成为编程高手的二十二条军规
  3. Unity——用UnityEditor拷贝FBX中的AnimationClip
  4. OpenGL:编译glfw并配置
  5. C++_类和对象_对象特性_构造函数和析构函数---C++语言工作笔记040
  6. Android Multimedia框架总结(十八)Camera2框架从Java层到C++层类关系
  7. 算法:Sqrt(x) (x 的平方根)
  8. Linux、Jvm、MySql性能监控小工具
  9. vue网易严选购物商城项目
  10. 虚拟机linux删除文件后未释放空间,【Linux命令】删除大文件后磁盘空间未释放问题...
  11. Linux之线程条件变量cond
  12. 平衡运输问题及其表上作业法---指派问题及其匈牙利解法
  13. LVS 负载均衡集群(一)| 超详细!一文带你了解 LVS 负载均衡集群
  14. python中取对数怎么表示_python中取对数
  15. 帕金森病的功能性脑连接障碍:一项5年的纵向研究
  16. 嵌入式基础01【转载】详解大端模式和小端模式
  17. 语文(文学)类智力竞赛题荟萃
  18. 不乱于心,不困于情,不畏将来,不念过往
  19. Java基础篇-基本类型
  20. mobl:针对移动Web开发的“.NET研究”DSL

热门文章

  1. Linux 基本命令(自学笔记)
  2. mysql 存储过程 风险_删除/恢复SQL server危险的存储过程方法
  3. 【转】mac/linux终端光标的快捷键操作
  4. 手机自带计算机的功能,手机上的这3个小功能,比电脑方便好用,你知道吗?...
  5. 异常关闭MyEclipse 8.6后,不能重启
  6. 前端 JavaScript 中 JSON.stringify() 的基本用法
  7. java list 之详解_java集合(二)List集合之ArrayList详解
  8. 图解CSS中padding、margin、border的区别及使用
  9. 软件过程改进杂谈 00.序
  10. 使用GDAL将下载的Google卫星图像转为带坐标的tif