javabyteint转换
‘壹’ java中int强制转换byte
因为在java中,int类型的占4个字节,而byte占1个字节,所以int类型转化为byte类型时会出现位丢失情况,即将int的低8位作为byte类型的值。int型变量的值为257,对应的二进制是100000001,后8位是00000001,第一个0表示符号位,表示正数,所以变量x的值为1。
‘贰’ 求教如何将一个java的byte数组快速转换为int数组
public class ByteUtil {
/**
* 将 Little-Endian 的字节数组转为 int 类型的数据<br />
* Little-Endian 表示高位字节在高位索引中
* @param bys 字节数组
* @param start 需要转换的开始索引位数
* @param len 需要转换的字节数量
* @return 指定开始位置和长度以 LE 方式表示的 int 数值
*/
public static int bytes2IntLE(byte[] bys, int start, int len) {
return bytes2Int(bys, start, len, false);
}
public static int bytes2IntLE(byte[] bys) {
return bytes2Int(bys, 0, bys.length, false);
}
/**
* 将 Big-Endian 的字节数组转为 int 类型的数据<br />
* Big-Endian 表示高位字节在低位索引中
* @param bys 字节数组
* @param start 需要转换的开始索引位数
* @param len 需要转换的字节数量
* @return 指定开始位置和长度以 BE 方式表示的 int 数值
*/
public static int bytes2IntBE(byte[] bys, int start, int len) {
return bytes2Int(bys, start, len, true);
}
public static int bytes2IntBE(byte[] bys) {
return bytes2Int(bys, 0, bys.length, true);
}
/**
* 将字节数组转为 Java 中的 int 数值
* @param bys 字节数组
* @param start 需要转换的起始索引点
* @param len 需要转换的字节长度
* @param isBigEndian 是否是 BE(true -- BE 序,false -- LE 序)
* @return
*/
private static int bytes2Int(byte[] bys, int start, int len,
boolean isBigEndian) {
int n = 0;
for(int i = start, k = start + len % (Integer.SIZE / Byte.SIZE + 1); i < k; i++) {
n |= (bys[i] & 0xff) << ((isBigEndian ? (k - i - 1) : i) * Byte.SIZE);
}
return n;
}
}
‘叁’ JAVA中怎么将int数据转换为byte数据
JAVA中根据以下代码将int数据转换为byte数据:
public static byte[] int32ToBytes(int val) {
int size = Integer.SIZE / Byte.SIZE;
byte[] ret = new byte[size];
for (int i = 0; i < size; ++i) {
ret[i] = (byte) (val << (8 * i) >> 56);
}
return ret;
}
(3)javabyteint转换扩展阅读
Java也提供了一个byte数据类型,并且是基本类型。java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte。
byte,即字节,由8位的二进制组成。在Java中,byte类型的数据是8位带符号的二进制数。在计算机中,8位带符号二进制数的取值范围是[-128, 127],所以在Java中,byte类型的取值范围也是[-128, 127]。
运算规则:
####正数的最高位都是 0 ,正数的值就是二进制表示的值。 ####
####负数的最高位都是 1 ,负数的值是 取反后加一 然后加个负号得到得值。 ####
‘肆’ java 如何将byte[4]数组转换成一个int型数据
java中将4字节的byte数组转成一个int值的工具方法如下: x0dx0a/** x0dx0a* @param byte[]x0dx0a* @return intx0dx0a*/ x0dx0apublic static int byteArrayToInt(byte[] b){ x0dx0a byte[] a = new byte[4]; x0dx0a int i = a.length - 1,j = b.length - 1; x0dx0a for (; i >= 0 ; i--,j--) {//从b的尾部(即int值的低位)开始数据 x0dx0a if(j >= 0) x0dx0a a[i] = b[j]; x0dx0a else x0dx0a a[i] = 0;//如果b.length不足4,则将高位补0 x0dx0a } x0dx0a int v0 = (a[0] & 0xff) << 24;//&0xff将byte值无差异转成int,避免Java自动类型提升后,会保留高位的符号位 x0dx0a int v1 = (a[1] & 0xff) << 16; x0dx0a int v2 = (a[2] & 0xff) << 8; x0dx0a int v3 = (a[3] & 0xff) ; x0dx0a return v0 + v1 + v2 + v3; x0dx0a}
‘伍’ java如何将byte类型数组变成int类型的数组
每4个byte转化成一个int,使用位运算,大致如下
大端序:
int[i]=byte[4*i]<<24|byte[4*i+1]<<16|byte[4*i+2]<<8|byte[4*i+3];
小端序:
int[i]=byte[4*i]|byte[4*i+1]<<8|byte[4*i+2]<<16|byte[4*i+3]<<24;