byte数组与int类型互相转换的几种方式
查看原文:http://www.ibloger.net/article/147.html
Java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送、者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型。下面有两种方式。
方法一
Java
/**
* int到byte[]
* @param i
* @return
*/
public static byte[] intToByteArray(int i) {
byte[] result = new byte[4];
// 由高位到低位
result[0] = (byte) ((i >> 24) & 0xFF);
result[1] = (byte) ((i >> 16) & 0xFF);
result[2] = (byte) ((i >> 8) & 0xFF);
result[3] = (byte) (i & 0xFF);
return result;
}
/**
* byte[]转int
* @param bytes
* @return
*/
public static int byteArrayToInt(byte[] bytes) {
int value = 0;
// 由高位到低位
for (int i = 0; i < 4; i++) {
int shift = (4 - 1 - i) * 8;
value += (bytes[i] & 0x000000FF) << shift;// 往高位游
}
return value;
}
public static void main(String[] args) {
byte[] b = intToByteArray(128);
System.out.println(Arrays.toString(b));
int i = byteArrayToInt(b);
System.out.println(i);
}
方法二
Java
/**
* 此方法可以对string类型,float类型,char类型等 来与 byte类型的转换
* @param args
*/
public static void main(String[] args) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
try {
// int转换byte数组
dos.writeByte(-12);
dos.writeLong(12);
dos.writeChar('1');
dos.writeFloat(1.01f);
dos.writeUTF("好");
} catch (IOException e) {
e.printStackTrace();
}
byte[] aa = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
DataInputStream dis = new DataInputStream(bais);
// byte转换int
try {
System.out.println(dis.readByte());
System.out.println(dis.readLong());
System.out.println(dis.readChar());
System.out.println(dis.readFloat());
System.out.println(dis.readUTF());
} catch (IOException e) {
e.printStackTrace();
}
try {
dos.close();
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
补充
方法1中的 int到byte[],还可以使用下面的ByteBuffer方式,结果一样,实例如下
Java
import java.nio.ByteBuffer;
public class RandomUtil {
public static byte[] intToByteArray(int i) {
byte[] result = new byte[4];
// 由高位到低位
result[0] = (byte) ((i >> 24) & 0xFF);
result[1] = (byte) ((i >> 16) & 0xFF);
result[2] = (byte) ((i >> 8) & 0xFF);
result[3] = (byte) (i & 0xFF);
return result;
}
public static void main(String[] args) {
int v = 123456;
byte[] bytes = ByteBuffer.allocate(4).putInt(v).array();
for (byte t : bytes) {
System.out.println(t);
}
System.out.println("----- 分割线 -------");
byte[] bytes2 = intToByteArray(v);
for (byte t : bytes2) {
System.out.println(t);
}
}
}
输出
0
1
-30
64
----- 分割线 -------
0
1
-30
64
byte数组与int类型互相转换的几种方式相关推荐
- java中byte数组与int类型的转换(两种方式)
java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...
- java整型转换为数组_基于java中byte数组与int类型的转换(两种方法)
java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...
- byte[] 数组和字符串的转换,与byte[] 数组和int类型的之间的转化
我们先来看看byte bool int ushort 等的定义 首先时byte[]数组与string之间的转换 string 转换位byte[] 数组 string str = "1-1 ...
- byte[]数组和int之间的转换
这里简单记录下两种转换方式: 第一种: 1.int与byte[]之间的转换(类似的byte short,long型) [java] view plaincopy /** * 将int数值转换为占四个字 ...
- Java中byte[]数组和int之间的转换
在最近的项目中需要用到byte[]和int互转,找了一些资料选了其中感觉蛮不错的一种解决方法记录一下. 转自:http://blog.csdn.net/sunnyfans/article/detail ...
- 【delphi】Byte数组与String类型的转换
string string = AnsiString = 长字符串,理论上长度不受限制,但其实受限于最大寻址范围2的32次方=4G字节: 变量Str名字是一个指针,指向位于堆内存的字符序列,字符序列起 ...
- java byte数组转long_Java中byte、byte数组与int、long的转换详解
一.Java 中 byte 和 int 之间的转换源码: //byte 与 int 的相互转换 public static byte intToByte(int x) { return (byte) ...
- java byte转成int数组_Java任意长度byte数组转换为int数组的方法
前言 嗯.最近工程上遇到一个byte数组转换为int的问题,解决过程中遇到了几个坑,经过各种查资料终于还是解决了.撒花. Java的位运算以及byte数组与其他类型数据的转换比c/c++感觉麻烦一些. ...
- java byte数组转int数组_Java任意长度byte数组转换为int数组的方法
前言 嗯.最近工程上遇到一个byte数组转换为int的问题,解决过程中遇到了几个坑,经过各种查资料终于还是解决了.撒花. Java的位运算以及byte数组与其他类型数据的转换比c/c++感觉麻烦一些. ...
最新文章
- Java JPanel的使用
- linux中三个time:atime、mtime、ctime
- 编程之美-求二进制数中1的个数方法整理
- Design Pattern: Observer Pattern
- VTK:PolyData之CellLocatorVisualization
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试
- 我从未看过荒原写作背景_您从未听说过的最佳数据科学认证
- 《Python地理数据处理》——导读
- Linux系统编程4:入门篇之最强编辑器vim的使用攻略
- 25条div+CSS编程提醒及小技巧整理
- opencv函数medianBlur( );
- 华为认证HCNA知识点
- 微信公众号获得城市及街道位置信息
- 理解充分条件与必要条件
- mysql容灾备份和恢复_关于容灾备份和恢复
- 移动硬盘丢失的分区可以恢复吗
- 超详细open vn搭建之Linux亲测可用
- PHPCMSV9 企业黄页 黄页企业模板添加方法
- 我在华为工作十年的感悟——徐家骏
- 关于Unity 5.x Lightmap Shader 编译过慢的分析
热门文章
- 归并求逆序对算法图文详解
- JAVA快速排序过程图解(10步之内看懂)
- VMware Workstation Pro 17虚拟机软件详细安装教程
- yh的生日,我的策划
- c语言万年历编程规律,用C语言如何编写“万年历”
- 百度地图 - 使用数据可视化MapVGL
- 从日志文件解决ArcGIS Server性能低下问题的步骤(1)
- 涂鸦wifi智能插座(BK7231N/BK7231T)刷开源固件,实现mqttt本地化接入homeassistant
- 【Redis核心原理和应用实践】原理 8:有备无患 —— 主从同步
- 计算机配置的网关,电脑的默认网关怎么设置?