티스토리 뷰
개발 관련/Java
[JAVA] int 또는 float 를 byte 배열 타입으로 변환. byte 배열을 int 또는 float 으로 변환, Unsigned 표현.
snoworca 2014. 3. 4. 16:22자주쓰는 함수라 매번 코딩하기 귀찮아서 올려 놓는다.
아래는 4개의 길이를 갖는 byte 배열을 int 로 바꾸거나 int 를 4개의 길이를 갖는 byte 배열로 바꾸는 것이다.
그밖에 unsigned 를 지원하지 않는 자바에서 int 데이터를 unsinged 표현 값으로 바꾸기.// 아래의 방법 외에 다음과 같이 간단한 방법도 존재한다. :
// byte[] byteArray = ByteBuffer.allocate(4).putInt(value).array(); public byte[] intToByteArray(int value) { byte[] byteArray = new byte[4]; byteArray[0] = (byte)(value >> 24); byteArray[1] = (byte)(value >> 16); byteArray[2] = (byte)(value >> 8); byteArray[3] = (byte)(value); return byteArray; } public int byteArrayToInt(byte bytes[]) { return ((((int)bytes[0] & 0xff) << 24) | (((int)bytes[1] & 0xff) << 16) | (((int)bytes[2] & 0xff) << 8) | (((int)bytes[3] & 0xff))); }이 코드는 자바 기준으로 작성되어 있어 big endian 방식으로 되어있는데, x86 계열에서 컴파일되는 C 에서는 little endian 방식으로 바꿔야한다. 예를들어 위 코드에서 배열 인덱스 순서만 0,1,2,3 에서 3,2,1,0 순으로 바꿔주기만 하면 된다. 아래와 같이 말이다.
byteArray[3] = (byte)(value >> 24);
byteArray[2] = (byte)(value >> 16);
byteArray[1] = (byte)(value >> 8);
byteArray[0] = (byte)(value);
이제 위에 예제를 이용하여 Byte Array to Float, Float to Byte Array 로 변환하는 함수를 만들어 보겠
다.
public byte[] floatToByteArray(float value) { int floatValue = Float.floatToIntBits(value); return intToByteArray(floatValue); } public float byteArrayToFloat(byte bytes[]) { int value = byteArrayToInt(bytes); return Float.intBitsToFloat(value); }역시 JAVA 가 여러모로 편하다.
C/C++ 에서는 float -> int 주소를 포인터 캐스팅 하는 방법으로 아주 쉽게 바꿀 수 있는데, 환경에 따라서 불가능할수도 있다. 그럴 경우에는 아주 조금 번거롭게 변경해야 한다. 이 부분에 대하여 다음에 다뤄보겠다.
public long toUnsigned(int value) { return ((long)value & 0xFFFFFFFFL); }
'개발 관련 > Java' 카테고리의 다른 글
JAVA 텍스트 파일의 Encoding 정보 가져오기 + String Encoding 변환하기. (1) | 2015.11.18 |
---|---|
Guava 사용 요약 슬라이드. (0) | 2015.04.17 |
[JAVA:병렬 프로그래밍 - 3] Exchanger 사용하기. (0) | 2014.10.06 |
[JAVA:병렬 프로그래밍 - 2] CyclicBarrier 사용하기. (0) | 2014.09.02 |
[JAVA:병렬 프로그래밍 - 1] CountDownLatch 사용하기. (0) | 2014.08.19 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 부트로더
- json
- 아두이노
- oled
- 안드로이드
- 블루투스
- noidemcu
- 이더넷
- 병렬 프로그래밍
- Cheapduino
- ESP8266
- 칩두이노
- NeoPixel
- 스마트 무드등
- Java
- HC-06
- 가습기
- arduino
- Android
- activity
- ATtiny85
- 침블락
- bluetooth
- 알리익스프레스
- 개발
- 안드로이드 개발
- ndk
- Iot
- WS2812B
- ENC28J60
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함