位运算

位运算 说明 使用
&按位与 对应位都是1,结果为1,否则为0 a&b
|按位或 对应位都是0,结果为0,否则为1 a|b
^按位非 对应位值相同,结果为0,否则为1 a^b
~按位取反 每一位变相反位,即0变成1,1变成0 ~a
<<按位左移 低位补0 a<<2
>>按位右移 保留符号位,0为正,1为负 a>>2
>>>按位或 高位补0 a>>>2

补充:

  • 微机原理中,算数移动会保留符号位,逻辑移动不会保留符号位
  • byte数组》整型:利用byte&0xFF|<<
  • 整型》byte数组:利用value&0xFF强制装换(byte),和>>

端序

端序:字节序

  • byte数据顺序与内存地址高低的关系
  • 小端:将byte数组的低byte放在内存的低地址处
  • 大端:将byte数组的低byte放在内存的高地址处

小端:一般都是小端

  • 低字节在后,byte数组中序号小的在右边

大端:

  • 高字节在后,byte数组中序号大的在右边

bytes》int

    /*小端,低字节在后*/public static int bytesToIntLittleEndian(byte[] bytes) {// byte数组中序号小的在右边return bytes[0] & 0xFF | //(bytes[1] & 0xFF) << 8 | //(bytes[2] & 0xFF) << 16 | //(bytes[3] & 0xFF) << 24; //}/*大端,高字节在后*/public static int bytesToIntBigEndian(byte[] bytes) {// byte数组中序号大的在右边return bytes[3] & 0xFF | //(bytes[2] & 0xFF) << 8 | //(bytes[1] & 0xFF) << 16 | //(bytes[0] & 0xFF) << 24; //}

int》bytes

    /*小端,低字节在后*/public static byte[] intToBytesLittleEndian(short intValue) {// byte数组中序号小的在右边// 右边的数据放到byte数组中序号小的位置byte[] bytes = new byte[Short.BYTES];bytes[0] = (byte) (intValue & 0xff);bytes[1] = (byte) ((intValue >> Byte.SIZE) & 0xff);bytes[2] = (byte) ((intValue >> Byte.SIZE * 2) & 0xff);bytes[3] = (byte) ((intValue >> Byte.SIZE * 3) & 0xff);return bytes;}/*大端,高字节在后*/public static byte[] intToBytesBigEndian(short intValue) {// byte数组中序号大的在右边// 右边的数据放到byte数组中序号大的位置byte[] bytes = new byte[Short.BYTES];bytes[3] = (byte) (intValue & 0xff);bytes[2] = (byte) ((intValue >> Byte.SIZE) & 0xff);bytes[1] = (byte) ((intValue >> Byte.SIZE * 2) & 0xff);bytes[0] = (byte) ((intValue >> Byte.SIZE * 3) & 0xff);return bytes;}

bytes》short

    /*小端,低字节在后*/public static short bytesToShortLittleEndian(byte[] bytes) {// byte数组中序号小的在右边return (short) (bytes[0] & 0xFF | (bytes[1] & 0xFF) << 8);}/*大端,高字节在后*/public static short bytesToShortBigEndian(byte[] bytes) {// byte数组中序号大的在右边return (short) (bytes[1] & 0xFF | (bytes[0] & 0xFF) << 8);}

short》bytes

    /*小端,低字节在后*/public static byte[] shortToBytesLittleEndian(short shortValue) {// byte数组中序号小的在右边// 右边的数据放到byte数组中序号小的位置byte[] bytes = new byte[Short.BYTES];bytes[0] = (byte) (shortValue & 0xff);bytes[1] = (byte) ((shortValue >> Byte.SIZE) & 0xff);return bytes;}/*大端,高字节在后*/public static byte[] shortToBytesBigEndian(short shortValue) {// byte数组中序号大的在右边// 右边的数据放到byte数组中序号大的位置byte[] bytes = new byte[Short.BYTES];bytes[1] = (byte) (shortValue & 0xff);bytes[0] = (byte) ((shortValue >> Byte.SIZE) & 0xff);return bytes;}

bytes》long

    /*小端,低字节在后*/public static long bytesToLongLittleEndian(byte[] bytes) {// byte数组中序号小的在右边long values = 0;for (int i = (Long.BYTES - 1); i >= 0; i--) {values <<= Byte.SIZE;values |= (bytes[i] & 0xff);}return values;}/*大端,高字节在后*/public static long bytesToLongBigEndian(byte[] bytes) {// byte数组中序号大的在右边long values = 0;for (int i = 0; i < Long.BYTES; i++) {values <<= Byte.SIZE;values |= (bytes[i] & 0xff);}return values;}

long》bytes

    /*小端,低字节在后*/public static byte[] longToBytesLittleEndian(long longValue) {// byte数组中序号小的在右边// 右边的数据放到byte数组中序号小的位置byte[] result = new byte[Long.BYTES];for (int i = 0; i < result.length; i++) {result[i] = (byte) (longValue & 0xFF);longValue >>= Byte.SIZE;}return result;}/*大端,高字节在后*/public static byte[] longToBytesBigEndian(long longValue) {// byte数组中序号大的在右边// 右边的数据放到byte数组中序号大的位置byte[] result = new byte[Long.BYTES];for (int i = (result.length - 1); i >= 0; i--) {result[i] = (byte) (longValue & 0xFF);longValue >>= Byte.SIZE;}return result;}

java byte数组与int之间相互转换相关推荐

  1. byte数组与字符串之间相互转换

    byte数组与字符串之间相互转换 字符串转数组 数组转字符串 使用String类 利用16进制字符串 字符串转数组 public static void main(String[] args) {St ...

  2. java byte数组转int数组_Java任意长度byte数组转换为int数组的方法

    前言 嗯.最近工程上遇到一个byte数组转换为int的问题,解决过程中遇到了几个坑,经过各种查资料终于还是解决了.撒花. Java的位运算以及byte数组与其他类型数据的转换比c/c++感觉麻烦一些. ...

  3. Java中byte[]数组和int之间的转换

    在最近的项目中需要用到byte[]和int互转,找了一些资料选了其中感觉蛮不错的一种解决方法记录一下. 转自:http://blog.csdn.net/sunnyfans/article/detail ...

  4. byte[]数组和int之间的转换

    这里简单记录下两种转换方式: 第一种: 1.int与byte[]之间的转换(类似的byte short,long型) [java] view plaincopy /** * 将int数值转换为占四个字 ...

  5. java byte数组与int,long,short,byte转换

    1 public class DataTypeChangeHelper { 2 /** 3 * 将一个单字节的byte转换成32位的int 4 * 5 * @param b 6 * byte 7 * ...

  6. java byte数组转long_Java中byte、byte数组与int、long的转换详解

    一.Java 中 byte 和 int 之间的转换源码: //byte 与 int 的相互转换 public static byte intToByte(int x) { return (byte) ...

  7. java byte转成int数组_Java任意长度byte数组转换为int数组的方法

    前言 嗯.最近工程上遇到一个byte数组转换为int的问题,解决过程中遇到了几个坑,经过各种查资料终于还是解决了.撒花. Java的位运算以及byte数组与其他类型数据的转换比c/c++感觉麻烦一些. ...

  8. java byte数组string_byte数组和String之间的转化

    JAVA里面关于byte数组和String之间的转换问题 把byte转化成string,必须经过编码. 例如下面一个例子: import java.io.UnsupportedEncodingExce ...

  9. java整型转换为数组_基于java中byte数组与int类型的转换(两种方法)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...

最新文章

  1. Pycharm + Anaconda 安装遇到的问题以及自己的理解
  2. 临江市领导参观视察域乎 —— 积极探索、稳妥布局“区块链+农业”
  3. linux交换空间使用率,linux编程系统中交换空间的使用情况
  4. java中为什么需要常量和变量的区别_Java中的变量和常量
  5. HandlerThread原理与应用
  6. 【收藏备用】服务器基本故障及排查方法
  7. 交换机的一些常见网络命令
  8. 【转载】基于Nios II的DMA传输总结(附源码)
  9. 用友 提示“尚有已全部暂估报销的单据未进行处理,不能进行12月的期末处理!”...
  10. [RabbitMQ]MQ 的选择
  11. linux 屏幕输出 高亮_通过printf设置Linux终端输出的颜色和显示方式
  12. 牛客网_Wannafly模拟赛1
  13. 数字图像处理第三版中文版部分答案-冈萨雷斯
  14. 雅虎Yahoo 前段优化 14条军规
  15. 梯度下降与一元线性回归
  16. matlab fft 基波,fft 谐波分析_matlab fft频谱分析_傅里叶变换谐波分析
  17. java读取mp3文件_java读取mp3文件 | 学步园
  18. 干货!CRM绩效考核指标(KPI)整理
  19. 语句摘抄——第19周
  20. vim全局搜索当前目录

热门文章

  1. 关于TF卡、SDHC标准和 class 速度等级分析
  2. babyos2(39) network(5) -- icmp echo request, reply, receive
  3. java用tabula解析pdf文件中的表格
  4. 智能安全帽价格多少?什么品牌好?
  5. 【模拟IC】使用 matlab 对正反馈稳定性分析与仿真
  6. 焦作大学计算机应用技术代码,焦作大学专业代码
  7. VC如何调用DLL文件
  8. Django中的CBV视图
  9. 【刷题日记】C语言经典编程题
  10. linux parted分区