1. 整形和字节数组转换公式

int a = -128
byte[] b = {(byte)(a >> 24), (byte)(a >> 16) , (byte)(a >> 8) , (byte)a}
b[0] = (byte)(a >> 24)
b[0] = (byte)(a >> 16)
b[0] = (byte)(a >> 8)
b[0] = (byte)a
int result = ((b[0] & 0xFF) << 24) | ((b[1] & 0xFF) << 16) | ((b[2] & 0xFF) << 8) | (b[3] & 0xFF) = (((byte)(a >> 24) & 0xFF) << 24) | (((byte)(a >> 16) & 0xFF) << 16) | (((byte)(a >> 8) & 0xFF) << 8) | (a & 0xFF)

2. 整形和字节数组的互相转换例子

/*** 整形和字节数组的互相转换, 当成公式记*/
public class ByteArrayIntChangeStyle {public static void main(String[] args) {for(int i = Byte.MIN_VALUE * 50; i <= Byte.MAX_VALUE; i++) {System.out.println(i + " " + byteArrayToInt(intToByteArray(i)));}}// byte类型的数值与 0xFF按位与, 使得不关心的位全是0
public static int byteArrayToInt(byte[] b) {  return  (b[0] & 0xFF) << 24 |  (b[1] & 0xFF) << 16 |  (b[2] & 0xFF) << 8 | b[3] & 0xFF;
}  // 强制转换成了byte类型, 丢弃了高位, 所以与 0xFF按位与操作可有可无
public static byte[] intToByteArray(int a) {  return new byte[] {
//          (byte) ((a >> 24) & 0xFF),
//          (byte) ((a >> 16) & 0xFF),
//          (byte) ((a >> 8) & 0xFF),
//          (byte) (a & 0xFF)(byte) (a >> 24),  (byte) (a >> 16),     (byte) (a >> 8),     (byte) a};
}}

3. 分析整形-1和字节数组之间的互相转换

-1的原码: 10000000 00000000 00000000 00000001

-1的反码: 11111111 11111111 11111111 11111110

-1的补码: 11111111 11111111 11111111 11111111

字节数组byte[] b = new byte[4];

3.1. b[0] = (byte) ((-1 >> 24) & 0xFF) , 存储的是-1的25-32位的数据

-1的右移24位, 高位用1填补:      11111111 11111111 11111111 11111111

0xFF的补码:                     00000000 00000000 00000000 11111111

-1和0xFF按位与:                00000000 00000000 00000000 11111111

-1和0xFF按位与, 转换成byte类型, 丢弃掉高位数据:             11111111

-1和0xFF按位与, 转换成byte类型, 反码:                       11111110

-1和0xFF按位与, 转换成byte类型, 原码:                       10000001

结果: -1

3.2. b[1] = (byte) ((-1 >> 16) & 0xFF) , 存储的是-1的17-24位的数据

-1的右移16位, 高位用1填补:      11111111 11111111 11111111 11111111

0xFF的补码:                     00000000 00000000 00000000 11111111

-1和0xFF按位与:                00000000 00000000 00000000 11111111

-1和0xFF按位与, 转换成byte类型, 丢弃掉高位数据:             11111111

-1和0xFF按位与, 转换成byte类型, 反码:                       11111110

-1和0xFF按位与, 转换成byte类型, 原码:                       10000001

结果: -1

3.3. b[2] = (byte) ((-1 >> 8) & 0xFF), 存储的是-1的9-16位的数据

-1的右移8位, 高位用1填补:      11111111 11111111 11111111 11111111

0xFF的补码:                     00000000 00000000 00000000 11111111

-1和0xFF按位与:                00000000 00000000 00000000 11111111

-1和0xFF按位与, 转换成byte类型, 丢弃掉高位数据:             11111111

-1和0xFF按位与, 转换成byte类型, 反码:                       11111110

-1和0xFF按位与, 转换成byte类型, 原码:                       10000001

结果: -1

3.4. b[3] = (byte) (-1 & 0xFF) , 存储的是-1的1-8位的数据

-1的补码:                       11111111 11111111 11111111 11111111

0xFF的补码:                     00000000 00000000 00000000 11111111

-1和0xFF按位与:                00000000 00000000 00000000 11111111

-1和0xFF按位与, 转换成byte类型, 丢弃掉高位数据:             11111111

-1和0xFF按位与, 转换成byte类型, 反码:                       11111110

-1和0xFF按位与, 转换成byte类型, 原码:                       10000001

结果: -1

3.5. b = {-1, -1, -1, -1}

3.6. (b[0] & 0xFF) << 24

b[0]的补码:                                                  11111111

0xFF的补码:                     00000000 00000000 00000000 11111111

b[0]和0xFF按位与:               00000000 00000000 00000000 11111111

b[0]和0xFF按位与, 左移24位, 低位0填补:

11111111 00000000 00000000 00000000

3.7. (b[1] & 0xFF) << 16

b[1]的补码:                                                  11111111

0xFF的补码:                     00000000 00000000 00000000 11111111

b[1]和0xFF按位与:               00000000 00000000 00000000 11111111

b[1]和0xFF按位与, 左移16位, 低位0填补:

00000000 11111111 00000000 00000000

3.8. (b[2] & 0xFF) << 8

b[2]的补码:                                                  11111111

0xFF的补码:                     00000000 00000000 00000000 11111111

b[2]和0xFF按位与:               00000000 00000000 00000000 11111111

b[2]和0xFF按位与, 左移8位, 低位0填补:

00000000 00000000 11111111 00000000

3.9. b[3] & 0xFF

b[3]的补码:                                                  11111111

0xFF的补码:                     00000000 00000000 00000000 11111111

b[3]和0xFF按位与:               00000000 00000000 00000000 11111111

3.10. b[0] | b[1] | b[2] | b[3]

b[0]补码:                        11111111 00000000 00000000 00000000

b[1]补码:                        00000000 11111111 00000000 00000000

b[2]补码:                        00000000 00000000 11111111 00000000

b[3]补码:                        00000000 00000000 00000000 11111111

b[0] b[1] b[2] b[3]按位或操作:      11111111 11111111 11111111 11111111

b[0] b[1] b[2] b[3]按位或操作反码:  11111111 11111111 11111111 11111110

b[0] b[1] b[2] b[3]按位或操作原码:  10000000 00000000 00000000 00000001

结果: -1

4. 分析整形128和字节数组之间的互相转换

128的补码: 00000000 00000000 00000000 10000000

字节数组byte[] b = new byte[4];

4.1. b[0] = (byte) ((128 >> 24) & 0xFF) , 存储的是128的25-32位的数据

128的右移24位, 高位用0填补:    00000000 00000000 00000000 00000000

0xFF的补码:                     00000000 00000000 00000000 11111111

128和0xFF按位与:               00000000 00000000 00000000 00000000

128和0xFF按位与, 转换成byte类型, 丢弃掉高位数据:           00000000

结果: 0

4.2. b[1] = (byte) ((128 >> 16) & 0xFF) , 存储的是128的17-24位的数据

128的右移16位, 高位用0填补:    00000000 00000000 00000000 00000000

0xFF的补码:                     00000000 00000000 00000000 11111111

128和0xFF按位与:               00000000 00000000 00000000 00000000

128和0xFF按位与, 转换成byte类型, 丢弃掉高位数据:           00000000

结果: 0

4.3. b[2] = (byte) ((128 >> 8) & 0xFF), 存储的是128的9-16位的数据

128的右移8位, 高位用0填补:    00000000 00000000 00000000 00000000

0xFF的补码:                     00000000 00000000 00000000 11111111

128和0xFF按位与:               00000000 00000000 00000000 00000000

128和0xFF按位与, 转换成byte类型, 丢弃掉高位数据:           00000000

结果: 0

4.4. b[3] = (byte) (128 & 0xFF) , 存储的是128的1-8位的数据

128的补码:                      00000000 00000000 00000000 10000000

0xFF的补码:                     00000000 00000000 00000000 11111111

128和0xFF按位与:               00000000 00000000 00000000 10000000

128和0xFF按位与, 转换成byte类型, 丢弃掉高位数据:           10000000

结果: -128

4.5. b = {0, 0, 0, -128}

4.6. (b[0] & 0xFF) << 24

b[0]的补码:                                                  00000000

0xFF的补码:                     00000000 00000000 00000000 11111111

b[0]和0xFF按位与:               00000000 00000000 00000000 00000000

b[0]和0xFF按位与, 左移24位, 低位0填补:

00000000 00000000 00000000 00000000

4.7. (b[1] & 0xFF) << 16

b[1]的补码:                                                  00000000

0xFF的补码:                     00000000 00000000 00000000 11111111

b[1]和0xFF按位与:               00000000 00000000 00000000 00000000

b[1]和0xFF按位与, 左移16位, 低位0填补:

00000000 00000000 00000000 00000000

4.8. (b[2] & 0xFF) << 8

b[2]的补码:                                                  00000000

0xFF的补码:                     00000000 00000000 00000000 11111111

b[2]和0xFF按位与:               00000000 00000000 00000000 00000000

b[2]和0xFF按位与, 左移8位, 低位0填补:

00000000 00000000 00000000 00000000

4.9. b[3] & 0xFF

b[3]的补码:                                                  10000000

0xFF的补码:                     00000000 00000000 00000000 11111111

b[3]和0xFF按位与:               00000000 00000000 00000000 10000000

4.10. b[0] | b[1] | b[2] | b[3]

b[0]补码:                        00000000 00000000 00000000 00000000

b[1]补码:                        00000000 00000000 00000000 00000000

b[2]补码:                        00000000 00000000 00000000 00000000

b[3]补码:                        00000000 00000000 00000000 10000000

b[0] b[1] b[2] b[3]按位或操作:      00000000 00000000 00000000 10000000

结果: 128

050_整形和字节数组转换相关推荐

  1. ASP.NET-------字符串和字节数组转换

    using System; using System.Collections.Generic; using System.Text; namespace NET.MST.Fourth.StringBy ...

  2. byte数组转byte数组 java_Java中文件与字节数组转换

    Java文件与字节数组转换 /** * 返回一个byte数组 * @param file * @return * @throws IOException */ private byte[] getBy ...

  3. C#字节数组转换成字符串转

    C#字节数组转换成字符串 如果还想从 System.String 类中找到方法进行字符串和字节数组之间的转换,恐怕你会失望了.为了进行这样的转换,我们不得不借助另一个类:System.Text.Enc ...

  4. InputStream输入流转换成字节数组 和 字节数组转换成字符串

    https://blog.csdn.net/night_iv/article/details/7525760?utm_source=blogxgwz5 https://www.cnblogs.com/ ...

  5. Java将字节数组转换成字符串

    reference:http://blog.csdn.net/lmj623565791/article/details/23609929 项目要求把通过TCP传过来的原始报文做保存,所以要先把字节数组 ...

  6. java下字符串和字节数组转换

    原文章地址: java下字符串和字节数组转换 http://blog.sina.com.cn/s/blog_7e8c7d560101lwta.html 1.字节数组转换为字符串 byte[] byBu ...

  7. java中 如何将一个字节数组转换成字符串

    String tmpStr="我的测试";  byte[] tb = tmpStr.getBytes();  String m=new String(tb);   System.o ...

  8. Java字节数组转换成十六进制字符串的几种方法

    前言 最近在项目中需要将字节数组转换成十六进制字符串,而Java内置的库中并没有相关工具可用,因此查了一下byte数组转hex字符串的相关方法,列出如下,需要可以直接拿来使用. 方法1:使用Strin ...

  9. ASCII字节数组转换成字符串

    有一些通信中,需要字符串装换成ASCII字节数组数据,进行数据通信. 在数据解析的过程中,就需要将字节数组转换成字符串. byte[] data: String version; data的数据如下: ...

最新文章

  1. 摸鱼上招聘网站的小伙伴们注意了!监控系统可能已经把你设为“离职高危”......
  2. thinkphp联查
  3. IMEI 码的校验和生成
  4. uabntu18.04 安装mysql5.7
  5. 爬虫python爬取页面请求_03 Python网络爬虫第三弹《爬取get请求的页面数据》,urllib...
  6. 如何设计出一个比较合理的数据归档系统
  7. gateway笔记TODO
  8. 解决IntelliJ IDEA中打开JSP文件(使用快捷键Alt+F2)时,弹出的浏览器网页只显示JSP源码
  9. 【柒穆雨】平面设计好不好学?设计小白该如何学习平面设计
  10. 【Kafka】(二十四)轻量级流计算 Kafka Streams 实践总结
  11. 群发邮件的方法有哪些?怎样大量群发邮件?
  12. DDR SDRAM的内部结构Cell Structure
  13. 能用网络但是个个计算机不能连上,为什么无线网络连接上却不能上网,小编教你电脑连上无线网却不能上网怎么办...
  14. 根据圆的面积公式计算圆周率
  15. WebRTC H5实现服务器转发的视频聊天
  16. vscode提示:“An SSH installation couldn‘t be found”
  17. android 微博字体高亮,安卓开发札记——高仿新浪微博文字处理(实现关键字高亮,自定义表情替换并加入点击事件实现)...
  18. 多台路由器堆叠_关于多个无线网络叠加本人亲身经历!!最后成功了!!更新完毕!...
  19. java如何做标签云
  20. PHP中给数组中追加元素

热门文章

  1. Btrfs入门(一)
  2. Maven的安装文字版(Windows/Linux/Mac)
  3. VC++ error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)
  4. mysqlimport
  5. 【转】Android兼容性测试CTS Verifier-环境搭建、测试执行、结果分析
  6. 一个原生态ajax过程,提交表单的例子
  7. java实现二叉树的构建以及3种遍历方法
  8. SQL高级---SQL 约束 (Constraints)
  9. mysql 多列索引的生效规则
  10. PG通用(常用)功能