/**
* 整型转字节数组
*
* @param data 待转换数值
* @param bytes 转换后的数组
* @param beginIndex 数组起始下标
* @return
*/
public static int int2Bytes(int data, byte[] bytes, int beginIndex) {
if (null == bytes || beginIndex < 0 || bytes.length < beginIndex + 4) {
return -1;
}
try {
bytes[beginIndex++] = (byte) (data & 0xff);
bytes[beginIndex++] = (byte) (data >> 8 & 0xff);
bytes[beginIndex++] = (byte) (data >> 16 & 0xff);
bytes[beginIndex++] = (byte) (data >> 24 & 0xff);
} catch (RuntimeException e) {
throw e;
}
return beginIndex;
}
/**
* 长整型转字节数组
*
* @param data 待转换数值
* @param bytes 转换后的数组
* @param beginIndex 数组起始下标
* @return
*/
public static int long2Bytes(long data, byte[] bytes, int beginIndex) {
if (null == bytes || beginIndex < 0 || bytes.length < beginIndex + 8) {
return -1;
}
try {
bytes[beginIndex++] = (byte) (data & 0xff);
bytes[beginIndex++] = (byte) (data >> 8 & 0xff);
bytes[beginIndex++] = (byte) (data >> 16 & 0xff);
bytes[beginIndex++] = (byte) (data >> 24 & 0xff);
bytes[beginIndex++] = (byte) (data >> 32 & 0xff);
bytes[beginIndex++] = (byte) (data >> 40 & 0xff);
bytes[beginIndex++] = (byte) (data >> 48 & 0xff);
bytes[beginIndex++] = (byte) (data >> 56 & 0xff);
} catch (RuntimeException e) {
throw e;
}
return beginIndex;
}
/**
* 字节数组转整型
*
* @param bytes 待转换数组
* @param beginIndex 数组起始下标
* @return
*/
public static int bytes2Int(byte[] bytes, int beginIndex) {
if (null == bytes || beginIndex < 0 || bytes.length < beginIndex + 4) {
return -1;
}
int result = 0;
try {
int tmpVal = 0;
for (int i = 0; i < 4; i++) {
tmpVal = (bytes[i + beginIndex] << (i * 8));
switch (i) {
case 0:
tmpVal = tmpVal & 0x000000FF;
break;
case 1:
tmpVal = tmpVal & 0x0000FF00;
break;
case 2:
tmpVal = tmpVal & 0x00FF0000;
break;
case 3:
tmpVal = tmpVal & 0xFF000000;
break;
}
result |= tmpVal;
}
} catch (RuntimeException e) {
throw e;
}
return result;
}
/**
* 字节数组转长整型
*
* @param bytes 待转换数组
* @param beginIndex 数组起始下标
* @return
*/
public static long bytes2Long(byte[] bytes, int beginIndex) {
if (null == bytes || beginIndex < 0 || bytes.length < beginIndex + 8) {
return -1L;
}
long result = 0L;
try {
int shift = 0;
for (int i = 0; i < 8; i++) {
shift = i << 3;
result |= ((long) 0xff << shift) & ((long) bytes[i + beginIndex] << shift);
}
} catch (RuntimeException e) {
throw e;
}
return result;
}
Java中数值类型与字节数组之间的转换大法(精简)
喜欢秋天温暖的阳光和一杯沁人心脾的下午茶~
推荐阅读
- Luogu 1060 开心的金明 / NOIP 2006 (动态规划)
- Luogu 1084 NOIP2012 疫情控制 (二分,贪心,倍增)
- Libre 6003 「网络流 24 题」魔术球 (网络流,最大流)
- HDU 3081 Marriage Match II (网络流,最大流,二分,并查集)
- HDU 4289 Control (网络流,最大流)
- Libre 6011 「网络流 24 题」运输问题 (网络流,最小费用最大流)
- Libre 6004 「网络流 24 题」圆桌聚餐(网络流,最大流)
- Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)
- Luogu 2245 星际导航(最小生成树,最近公共祖先LCA,并查集)
- 使用Inno SetUp脚本打包Winform程序