如何由将一个4字节大小的数组中存放的值转换为类型为int变量的值?
java里面int型的数据是由4个字节存放的,
现在有一个数组 byte buf[4],它的4个字节里面存放的是某个int型变量的值,
请问各位大侠如何得到这个int型变量的值?
在c语言里面根据直接用强制类型转换就行了
char *pbuf = buf;
int a = (int)(*(int*)pbuf);
但在java里面不能对内存进行操作,所以问大家有什么好的解决办法。
我想过一个替代的办法:
int a = buf[0]*16777216 + buf[1]*65536 + buf[2]*256 + buf[3];
但如果这个数组里面存放的是一个float类型的变量,那要得到这个float类型的变量,
用上面的方法就极度复杂了。
希望大侠指点,java里面对这类问题是怎么处理的或者有没有直接可以用的类,谢谢!
问题点数:20、回复次数:5Top
1 楼haroyy(天平)回复于 2004-11-04 10:54:06 得分 10
ByteArrayInputStream bais = new ByteArrayInputStream(buf);
DataInputStream dis = new DataInputStream(bais);
int a = dis.readInt();Top
2 楼jiangnanyuzi(江南愚子)回复于 2004-11-04 11:04:38 得分 0
楼上好主意!Top
3 楼treeroot(旗鲁特)回复于 2004-11-04 11:24:45 得分 5
int BytesToInt(byte[] b){
return (b[0]<<24)|(b[1]<<16)|(b[2]<<8)|byte[3];
}
肯定比用流快Top
4 楼treeroot(旗鲁特)回复于 2004-11-04 11:31:55 得分 5
看看流实现得源码吧:
InputStream in = this.in;
int ch1 = in.read();
int ch2 = in.read();
int ch3 = in.read();
int ch4 = in.read();
if ((ch1 | ch2 | ch3 | ch4) < 0)
throw new EOFException();
return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
}
一样,何必去构造一个流呢?
对于float
float BytesToFloat(byte[] b){
return Float.intBitsToFloat(BytesToInt(b));
}Top
5 楼sylmoon(专注Oracle)回复于 2004-11-04 11:35:06 得分 0
用ArrayListTop




