byte 与 int 转换
复习过程中,遇到的不太理解的地方
(byte)b & 0xff
byte to int
比较下面两个
public static int byte2Int(byte b){return (int)b;}public static int byte2Int(byte b){return (int)(b & 0xff);}
疑问
你肯定在想这个与操作有什么影响吗?
是的,有影响 。以下是我的理解
& 0xff
0xff 的功能其实是补全32位int的 byte b = 11111111 ; // 脑袋里想的二进制表示 -1b & 0xff 结果是: 000...000(24个)11111111这样,得到的32位int值是用24个0补全的,所以我们得到的int值为 255
(int) b
没有与操作,我们可以考虑它是如何补全32位int的:若b表示负数,则用1补全位数,111111111...111(32个) 此为补码,补码求原码:符号为1,其余位取反加1. 还是 -1
所以,byte转int我们要理解是否考虑符号位。
强制类型转换较常用。
int 转 byte ,只需截取int的低8位即可
可以看到& 0xff 这一操作其实是保持了byte二进制的表示,这一特点我们后面会提到。
byte[] to int
如果说 byte 转 int 要考虑符号位,那么byte数组呢(4个byte转换1个int)
这时,我们要保持二进制的表示,什么意思呢
4个byte: -1 2 3 4 -1: 11111111 2 : 00000010 3 : 00000011 4 : 00000100得到的int值为该二进制表示拼接而成(方便理解) 11111111 00000010 00000011 00000100 值为多少,就要看高位低位了(大端小端)。
从这里可以看出,byte 拼接的过程中可以使用 & 0xff
// byte数组长度为4, bytes[3]为高8位
public static int bytes2Int(byte[] bytes){int value=0;value = ((bytes[3] & 0xff)<<24)|((bytes[2] & 0xff)<<16)|((bytes[1] & 0xff)<<8)|(bytes[0] & 0xff);return value;
}
int to byte[]
public static byte[] int2Bytes( int value )
{ byte[] src = new byte[4]; src[3] = (byte) ((value>>24) & 0xFF); src[2] = (byte) ((value>>16) & 0xFF); src[1] = (byte) ((value>>8) & 0xFF); src[0] = (byte) (value & 0xFF); return src;
}
byte 与 int 转换相关推荐
- java byte 和 int 转换
一个byte占8位,一个int占32位. int 转byte时,需要&0xff,去掉前面的24位.因此当int是正数时,转出的byte可能是负数 byte转int时,需要&0xff,补 ...
- java编程int和byte的用法_Java中的Byte Array和Int转换
Java中的Byte Array和Int转换 我有这两个函数有一些困难: byteArrayToInt和intToByteArray . 问题是,如果我使用另一个来得到另一个结果,结果是不同的,你可以 ...
- java byte转int 互相转换原理详解
转自:https://blog.csdn.net/wojiuai2093/article/details/50779879 int i = 0; i += ((b[0] & 0xff) & ...
- C++字节转换 (byte转int 互转)(BCD和HEX转换)
2个字节short int 高低位转化: short int y=0x7f21; y = ( (y & 0xff00) >> 8) | ( (y & 0x00ff ) &l ...
- c# byte char string转换
c# byte char string转换 在在做一些互操作的时候往往需要一些类型的相互转换,比如用c#访问 win32api的时候往往需要向api中传入DWORD参数 即:uint参数这些数值所表示 ...
- Java中String和byte[]间的转换浅析
Java语言中字符串类型和字节数组类型相互之间的转换经常发生,网上的分析及代码也比较多,本文将分析总结常规的byte[]和String间的转换以及十六进制String和byte[]间相互转换的原理及实 ...
- java byte 转 c_C 和 Java 之间的byte数据的转换问题
C语言里通常可能开发人员直接定义struct 作为数据包, 因此在java客户端接收struct 中的数据时候,受整数等类型的高低位存放的影响, 需要进行相应的转换, 参考: 转换代码如下: pack ...
- java byte[] 文件流 转换成string是乱码_Java学习--IO(二)、多线程
1.标准输入流 标准输入流是指从标准输入设备流向程序的数据. Java利用http://System.in来得到一个InputStream字节输入流 public static void main(S ...
- String类以及String与基本数据类型/char[]/byte[]之间的转换
String类: 1.String 声明为final的,不可被继承 2.String实现了Serializable接口:表示字符串是支持序列化的. 实现了Comparable接口:表示String可以 ...
最新文章
- 小白程序员仅用5分钟入职BAT,他只做了这件事!
- tomcat+bean例子
- 突然想起来,前天是感恩节。
- 用户画像-参考整理医疗app标签
- 猎豹产品经理:「全球化产品」应该要避开的几个坑
- 优秀!22岁读博士,26岁当教授,因为太优秀反而没人敢追?
- jquery实现上线翻滚效果公告
- JSP 页面 jstl 时间戳 long型转时间
- 多软件启动器 v1.0
- python今日内容_python笔记15
- 大数据之-Hadoop3.x_MapReduce_官方WordCount源码和序列化类型---大数据之hadoop3.x工作笔记0085
- 来,看我是如何把面试官问倒的!
- Tableau安装与破解
- ASO优化关键词覆盖、曝光原理
- GNOME 3 使用技巧
- win10家庭版不能保存关闭密码保护共享
- Task05|joyfulpandas|变形
- 初学EGE图形库(零)---从零开始CodeBlocks安装配置使用EGE图形库
- 用“掩码位图“,制作类似.png的“透明图片“①
- 重塑汽车产业价值链,ChinaJoy诚邀造车新势力加盟