2012-11-20 4 views
1

Java 프로젝트를위한 Python의 struct 모듈과 비슷한 것이 필요합니다. 나는 바이트 배열에 정수 (그리고 아마도 float과 double을 pack)하고 싶다. 또한 엔디안을 선택하고 다른 언어로 코드를 실행하는 일부 하드웨어에이 데이터를 보내야하므로 일반적으로 이것이 어떻게 수행되는지 완전히 제어 할 수 있습니다.byte []에 데이터 패킹

여기에서
+1

아마도 다음과 같이 될 수 있습니다. http://docs.oracle.com/javase/1.5.0/docs/api/java/nio/ByteBuffer.html? – mowwwalker

+0

아마도 파이썬을 사용할 수 있을까요? 아마 아니 겠지. 미안해. – Keith

+0

마치 Walkerneo와 똑같습니다. 그 질문을 읽는 누군가를 위해 대답에 어쩌면 살점을 넣고 싶습니다. 그래서 나는 그것을 받아 들인 대답으로 확인해 볼 수 있습니까? –

답변

2

를 사용할 수 있습니다. 이와 같이 :

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

관련 문제