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

这篇具有很好参考价值的文章主要介绍了java byte数组与int之间相互转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一、位运算

运算符 含义 说明
& 对应位都是1,结果为1,否则为0
| 对应位都是0,结果为0,否则为1
~ 取反 每一位变相反位,即0变成1,1变成0
^ 异或 对应位值相同,结果为0,否则为1
<< 左移位 低位补0
>> 右移位 保留符号位,0为正,1为负
>>> 无符号右移位 高位补0

位逻辑运算示例

A B A&B A|B ~A A^B
0 0 0 0 1 0
0 1 0 1 1 1
1 0 0 1 0 1
1 1 1 1 0 0

二、 端序

端序:字节序

byte数据顺序与内存地址高低的关系

小端(Litter Endian):

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

大端(Big Endian):

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

网络字节序(Network Order):

  • TCP/IP各层协议将字节序定义为Big Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。

主机字节序(Host Order)文章来源地址https://www.toymoban.com/news/detail-850599.html

  • 整数在内存中保存的顺序,它通常遵循Little Endian规则(不一定,要看主机的CPU架构)。所以当两台主机之间要通过TCP/IP协议进行通信的时候就需要调用相应的函数进行主机序列(Little Endian)和网络序(Big Endian)的转换。

三、byte数组与整数之间的转换

3.1、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; 
	}

3.2、int=>bytes

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

3.3、bytes=>short(int16)

	/*小端,低字节在后*/
    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);
    }

3.4、short(int16)=>bytes

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

3.5、bytes=>long(int64)

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

    /*大端,高字节在后*/
    public static long bytesToLongBigEndian(byte[] bytes) {
        // byte数组中序号大的在右边
        long values = 0;
        for (int i = 0; i < 16; i++) {
            values <<= 8;
            values |= (bytes[i] & 0xff);
        }
        return values;
    }

3.6、long(int64)=>bytes

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

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

到了这里,关于java byte数组与int之间相互转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言中的char类型和int类型的相互转换

    C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植等特点。C语言中有多种数据类型,用来表示不同的数据和信息。本文将介绍C语言中的两种基本数据类型:char类型和int类型,以及它们之间的相互转换的方法和原理。 char类型是一种字符类型,用来表示单个字符,

    2024年02月03日
    浏览(40)
  • Java实体和JSON之间的相互转换

    代码如下: 初始化并输出一下: 注意,如果没有使用“@Data”注解,一定要加上get和set方法,不然转化之后的Json是空的! 主要是对SerializerFeature枚举类的使用,详细的可以看这个博客: https://blog.csdn.net/xiang__liu/article/details/81570923 或者看这里: https://www.javadoc.io/static/com.ali

    2024年02月12日
    浏览(32)
  • Java 中图片与二进制之间如何相互转换?

    1、 下面是一个完整的代码示例。 指定文件路径转为二进制 将网络图片转为二进制 base64 转为图片资源 2、如何判断 base64 图片的格式? 3、将网络图片转为 base64 字符串 4、将 base64 字符串转为图片输出 注:该方法的入参,base64 格式文件不得有 文件头部标识信息,否则会转换

    2024年02月10日
    浏览(38)
  • java中日期转换Date、DateTime、TimeStamp、String之间相互转换

    1.1Date-String 2.1Date-TimeStamp 2.2TimeStamp-Date DateTime使用依赖 3.1Date-DateTime 方法1: 方法2: 3.2DateTime-Date 4.String转DateTime

    2024年02月15日
    浏览(49)
  • Opencv 基本操作四 指针数组、vector与Mat之间的相互转换 | Mat切片成Vector<mat>并还原

    在深度学习模型部署中通常存在读取图像为mat,然后将mat转换为float指针传入模型的操作。为了快捷开发,因此对指针数组、vector与Mat之间的相互转换进行整理。实现了指针数组、vector之间的相互转换;vector与Mat之间的相互转换(含单通道图像和多通道图像)。vector转mat主要

    2024年02月08日
    浏览(28)
  • Java:List相互转换数组

    经常我们会遇到前端传服务端值为数组的时候我们需要对其转换成集合便于一些其它操作,删除,匹配等操作,今天我们就总结下数组集合相互转换的方法 1、Object[] objArray = arrayList.toArray(); 2、String[] strArray = new String[list.size()]; 3、String[] strArray = list.toArray(new String[list.size()])

    2024年01月18日
    浏览(35)
  • JAVA对象、List、Map和JSON之间的相互转换

    参考文章: Java-json相关转换,JSONObject与实体类/map互转、List/List<map>和JSONArray互转、获取JSONObject中的key value、字符串String转换等 【JSON转换】String与JSONObject、JSONArray、JAVA对象和List 的相互转换

    2024年02月03日
    浏览(46)
  • Java中 List 和 JSON字符串之间的相互转换

    Java中 List 和 JSON字符串之间的相互转换 List 转 JSON 字符串 前端js将后端的json字符串转对象 JSON字符串转List

    2024年04月23日
    浏览(37)
  • #java 逗号分隔String字符串 - 数组 - 集合,相互转换

    1. 准备一个逗号分割字符串 2. 逗号分割字符串转换为集合(转换为集合之前会先转换为数组) 3. 集合转换为逗号分隔的字符串 4. 数组转逗号分隔字符串

    2024年02月04日
    浏览(38)
  • python中str、bytes、十六进制字符串的相互转换

    python中str、bytes、十六进制字符串的介绍 str是python的内置函数,str字符串在python中使用 \\\'\\\' 或者 \\\"\\\" 括起来的字符串,比如: bytes也是python的内置函数,bytes字符串通常以b开头,比如: 十六进制字符串是指字符串中每个字符表示一个十六进制数,两个字符组成一个字节,比如

    2024年02月21日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包