java byte to integer_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
踩
分享到:
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相关推荐
- c#中的long类型示例_C#中带示例的无符号字节数组
c#中的long类型示例 C#中的无符号字节数组 (Unsigned Byte Array in C#) In C#.Net, we can create an unsigned byte array ...
- java将byte转为无符号字节——解决java没有unsigned byte问题
在使用代码和硬件通讯时,通常碰到c++中使用无符号字节unsigned byte 进行数据发送与接受,但JAVA没有无符号字节,怎么把131(java的字节只能存 -128 ~127 )发送给机器呢, ...
- java string与integer_Java中Integer和String浅谈
http://qxzxcjq-126-com.iteye.com/blog/883283 Java中的基本数据类型有八种:int.char.boolean.byte.long.double.float ...
- java 发票打印_Java发票打印CommPortIdentifier与无符号字节的问题
嘿, 我需要在热敏发票打印机中打印发票 我写了这个程序来做到这一点(见下文) 但是,由于本地化的原因,我需要发送给打印机的字符值范围为0x80 - 0x102,但我发现它是不可能的,因为我不能发送一个 ...
- java date 转integer_java 中Date的各种格式转换
把java.util.Date格式的时间转为java.sql.Date格式的时间 java.sql.Date sqldate = new java.sql.Date(date.getTime()); ...
- c语言 char memcpy,在C中使用memcpy复制无符号字符数组
int n=50; 假设你在32位机器上,'n'将是一个4字节的值. N = 0x00000032 = 00000000B 00000000B 00000000B 00110010b unsigned ...
- java的左移位()和右移位()和无符号右移()
1.左移 ->左移运算符"<<" - 使指定值的所有位都左移规定的次数. ->左移m<<n 代表把数字m在无溢出的前提下乘以2的 ...
- C的无符号数据类型int,short,byte 转为 Java对应的数据long,char,short
//从网络中读取C的无符号int,short,byte字节数组,相应转换成java的long,char,short short anUnsignedByte = 0; char anUnsignedS ...
- java byte 无符号类型_获取java byte的无符号数值
byte a = (byte)234; System.out.println(a); 上面的代码,结果是-22,因为java中byte是有符号的,byte范围是-128~127. 如果想输出234,该 ...
最新文章
- 51CTO手機軟件有病毒? 有網絡安全的高手嗎?
- 成为编程高手的二十二条军规
- Unity——用UnityEditor拷贝FBX中的AnimationClip
- OpenGL:编译glfw并配置
- C++_类和对象_对象特性_构造函数和析构函数---C++语言工作笔记040
- Android Multimedia框架总结(十八)Camera2框架从Java层到C++层类关系
- 算法:Sqrt(x) (x 的平方根)
- Linux、Jvm、MySql性能监控小工具
- vue网易严选购物商城项目
- 虚拟机linux删除文件后未释放空间,【Linux命令】删除大文件后磁盘空间未释放问题...
- Linux之线程条件变量cond
- 平衡运输问题及其表上作业法---指派问题及其匈牙利解法
- LVS 负载均衡集群(一)| 超详细!一文带你了解 LVS 负载均衡集群
- python中取对数怎么表示_python中取对数
- 帕金森病的功能性脑连接障碍:一项5年的纵向研究
- 嵌入式基础01【转载】详解大端模式和小端模式
- 语文(文学)类智力竞赛题荟萃
- 不乱于心,不困于情,不畏将来,不念过往
- Java基础篇-基本类型
- mobl:针对移动Web开发的“.NET研究”DSL
热门文章
- Linux 基本命令(自学笔记)
- mysql 存储过程 风险_删除/恢复SQL server危险的存储过程方法
- 【转】mac/linux终端光标的快捷键操作
- 手机自带计算机的功能,手机上的这3个小功能,比电脑方便好用,你知道吗?...
- 异常关闭MyEclipse 8.6后,不能重启
- 前端 JavaScript 中 JSON.stringify() 的基本用法
- java list 之详解_java集合(二)List集合之ArrayList详解
- 图解CSS中padding、margin、border的区别及使用
- 软件过程改进杂谈 00.序
- 使用GDAL将下载的Google卫星图像转为带坐标的tif