2012-11-20 28 views
1

我需要类似于Java项目的Python结构模块的东西。我想打包整数(也可能是浮点数和双精度)到字节数组中。此外,我想选择字节顺序,并且通常完全控制这是如何完成的,因为我需要将这些数据发送到某个硬件,该硬件将以另一种语言运行代码。将数据打包为字节[]

+1

也许是这样的:http://docs.oracle.com/javase/1.5.0/docs/api/java/nio/ByteBuffer.html? – mowwwalker

+0

也许你可以使用Python?可能不会,但。非常抱歉。 – Keith

+0

完全像那个Walkerneo。想把这个答案放在一个答案中,也许有人读这个问题,这样我可以检查它作为接受的答案? –

回答

2

对于int VAR可以采取INT的每个字节,把阵列上。像这样:

int info = 123456789; 
byte [] data = new byte[100]; 
data[0] = (byte) ((info>>24) & 0xff); 
data[1] = (byte) ((info>>16) & 0xff); 
data[2] = (byte) ((info>>8) & 0xff); 
data[3] = (byte) ((info)  & 0xff); 
int out = 0; 
out = ((data[0]&0xff)<<24) | ((data[1]&0xff)<<16) | ((data[2]&0xff)<<8) | data[3]&0xff); 
System.out.println("info " + info); 
System.out.println("out " + out); 

对于float或double,你不能直接这样做。有必要将你的var转换为int。可以使用方法Float.floatToRawIntBits()Double.doubleToRawLongBits()完成。

+1

更好地使用['floatToRawIntBits()'](http://docs.oracle.com/javase/6/docs/api/java/lang/Float。 html#floatToRawIntBits%28float%29)或['doubleToRawLongBits()'](http://docs.oracle.com/javase/6/docs/api/java/lang/Double.html#doubleToRawLongBits%28double%29)用“像1000000这样的常数乘以”来欺骗... – glglgl

+0

@glglgl谢谢,使用floatToRawIntBits()真的更好。我会升级我的答案。 – Derzu