首页 > 编程语言 > 详细

Java中数值类型与字节数组之间的转换大法(精简)

时间:2020-11-28 14:26:19      阅读:30      评论:0      收藏:0      [点我收藏+]
/**
* 整型转字节数组
*
* @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中数值类型与字节数组之间的转换大法(精简)

原文:https://www.cnblogs.com/chenyixun/p/14052420.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!