2012-11-20 70 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