在Java编程中,有时我们需要将整型(int)和长整型(long)的数据转换为字节(byte),这在处理网络传输、二进制序列化或内存优化等场景中尤其常见。以下是一些关于如何在Java中进行这些转换的方法。 让我们看下如何将`int`转换为`byte`数组。在Java中,一个`int`是32位的,而一个`byte`是8位的。因此,将一个`int`转换为`byte`数组通常需要将`int`的每个部分分别存储到一个字节数组中。下面的`int2byte`方法实现了这个功能: ```java public static byte[] int2byte(int res) { byte[] targets = new byte[4]; targets[3] = (byte) (res & 0xff); // 最低位 targets[2] = (byte) ((res >> 8) & 0xff); // 次低位 targets[1] = (byte) ((res >> 16) & 0xff); // 次高位 targets[0] = (byte) (res >>> 24); // 最高位,无符号右移 return targets; } ``` 这个方法通过位操作将`int`的每个部分拆分为一个`byte`,并将其存储到数组中。注意`>>>`操作符用于无符号右移,这样即使在最高位有符号位的情况下,也能正确地处理正负数。 接下来,我们讨论如何将`byte`数组转换回`int`。`byteArrayToInt`方法实现了这个过程: ```java public static int byteArrayToInt(byte[] b) { byte[] a = new byte[4]; int i = a.length - 1, j = b.length - 1; for (; i >= 0; i--, j--) { // 从b的尾部(即int值的低位)开始copy数据 if (j >= 0) a[i] = b[j]; else a[i] = 0; // 如果b.length不足4,则将高位补0 } int v0 = (a[0] & 0xff) << 24; // &0xff将byte值无差异转成int,避免Java自动类型提升后,会保留高位的符号位 int v1 = (a[1] & 0xff) << 16; int v2 = (a[2] & 0xff) << 8; int v3 = (a[3] & 0xff); return v0 + v1 + v2 + v3; } ``` 该方法首先从`byte`数组的末尾开始复制数据到一个新的字节数组,以保持正确的字节顺序。然后,通过位移和位与运算,逐个将每个字节的值合并成原始的`int`值。 对于`long`到`byte`的转换,情况类似,但因为`long`是64位的,所以转换后的字节数组需要8个字节。`long2byte`方法如下: ```java public static byte[] long2byte(long res) { byte[] buffer = new byte[8]; for (int i = 0; i < 8; i++) { int offset = 64 - (i + 1) * 8; buffer[i] = (byte) ((res >> offset) & 0xff); } return buffer; } ``` 这个方法通过循环和位移操作,将`long`的每一位存储到字节数组中。 `byteArrayToLong`方法将`byte`数组转换回`long`: ```java public static long byteArrayToLong(byte[] b) { long values = 0; for (int i = 0; i < 8; i++) { values <<= 8; values |= (b[i] & 0xff); } return values; } ``` 这个方法通过逐个字节左移并按位或运算,将所有字节合并为原始的`long`值。 这些方法在处理原始字节数据时非常有用,尤其是在需要精确控制数据表示和节省存储空间的场景中。理解这些转换操作对于编写高效且内存友好的Java程序至关重要。同时,这些方法在进行网络通信、文件读写或序列化/反序列化时也十分常见。确保正确地进行字节转换是避免数据丢失和错误的关键步骤。






















- 粉丝: 12
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- (完整版)LTE无线网络优化试卷(高级).doc
- 电子商务第一章演示文稿(1).ppt
- 2023年浙江大学Linux程序设计实验报告.doc
- 高校电子商务专业建设现状调查与分析论文(1).doc
- 互联网金融监管之探讨(1).docx
- Excel使用技巧集锦—种使用技巧大全超全.docx
- 网络安全防火墙技术电子商务安全技术的发展和应用--大学毕业论文(1).doc
- 13网络购物的消费者行为ppt课件(全).ppt
- 深度学习导向下的高中语文教学策略(1).docx
- 基于51单片机超声波测距仪设计(1)(1).docx
- 财税实务:财务人员需掌握哪些计算机技能.pdf
- 6网络规划与设计.pptx
- 2023年计算机应用基础形成性考核册春电大形考参考答案.doc
- 大学生网络安全周国旗下讲话稿:远离网络游戏.docx
- java程序员工作总结.docx
- Excel-在金融计量和经济学中的应用.pptx


