투케이2K
108. (java/자바) 리틀엔디안(little endian), 빅엔디안(big endian) 데이터 포맷 수행 실시 본문
/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : Eclipse
개발 언어 : Java
/* =========================== */
/* =========================== */
[소스 코드]
package AI3;
import java.util.Arrays;
public class MainActivity13 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("[리틀엔디안(little endian), 빅엔디안(big endian) 데이터 포맷 수행 실시]");
/*[설 명]
* 1. 리틀 엔디안 방식은 낮은 주소(앞쪽공간)에 데이터의 하위(뒤쪽)바이트부터 저장하는 방식입니다
* (0x12345678 데이터는 > 78 56 34 12 순으로 저장됩니다)
* 2. 빅 엔디안 방식은 낮은 주소(앞쪽공간)에 데이터의 상위(앞쪽) 바이트부터 저장하는 방식입니다
* (0x12345678 데이터는 > 12 34 56 78 순으로 저장됩니다)
* 3. C프로그램은 리틀엔디안 방식으로 저장되며, java는 빅엔디안 방식으로 저장됩니다
* 4. 빅 엔디안과 리틀 엔디안은 단지 저장해야 할 큰 데이터를 어떻게 나누어 저장하는가에 따른 차이일 뿐입니다
*/
int data = 720;
System.out.println("원본 [정수 데이터] : "+data);
System.out.println("파싱 바이트 [정수_To_2byte] : "+Arrays.toString(getTwoLittle(data)));
System.out.println("파싱 바이트 [정수_To_4byte] : "+Arrays.toString(getFourLittle(data)));
System.out.println("");
byte two_Little_Arr[] = {-48, 2};
byte four_Little_Arr[] = {-48, 2, 0, 0};
System.out.println("원본 [2byte 데이터] : "+Arrays.toString(two_Little_Arr));
System.out.println("원본 [4byte 데이터] : "+Arrays.toString(four_Little_Arr));
System.out.println("파싱 [2byte_To_정수] : "+getTwoLittleToBig(two_Little_Arr));
System.out.println("파싱 [4byte_To_정수] : "+getFourLittleToBig(four_Little_Arr));
}//메인 종료
// ==== 정수값을 2바이트 리틀엔디안으로 데이터 포맷 수행 ====
public static byte[] getTwoLittle(int data){
//[2바이트 기준]
byte[] buf = new byte[2];
buf[0] = (byte)((data >>> 0) & 0xFF);
buf[1] = (byte)((data >>> 8) & 0xFF);
return buf;
}
// ==== 정수값을 4바이트 리틀엔디안으로 데이터 포맷 수행 ====
public static byte[] getFourLittle(int data){
//[4바이트 기준]
byte[] buf = new byte[4];
buf[0] = (byte)((data >>> 0) & 0xFF);
buf[1] = (byte)((data >>> 8) & 0xFF);
buf[2] = (byte)((data >>> 16) & 0xFF);
buf[3] = (byte)((data >>> 24) & 0xFF);
return buf;
}
// ==== 2바이트 리틀엔디안값을 다시 빅엔디안값으로 포맷 ====
public static int getTwoLittleToBig(byte[] data){
int[] arr = new int[2]; //2바이트 배열 공간
for(int i=0; i<arr.length; i++){
arr[i] = (int)(data[1-i] & 0xFF); //2바이트
}
return ((arr[0] << 8) + (arr[1] << 0)); //2바이트
}
// ==== 4바이트 리틀엔디안값을 다시 빅엔디안값으로 포맷 ====
public static int getFourLittleToBig(byte[] data){
int[] arr = new int[4]; //4바이트 배열공간
for(int i=0; i<arr.length; i++){
arr[i] = (int)(data[3-i] & 0xFF); //4바이트
}
return ((arr[0] << 24) + (arr[1] << 16) + (arr[2] << 8) + (arr[3] << 0)); //4바이트
}
}//클래스 종료
/* =========================== */
[결과 출력]
[리틀엔디안(little endian), 빅엔디안(big endian) 데이터 포맷 수행 실시]
원본 [정수 데이터] : 720
파싱 바이트 [정수_To_2byte] : [-48, 2]
파싱 바이트 [정수_To_4byte] : [-48, 2, 0, 0]
원본 [2byte 데이터] : [-48, 2]
원본 [4byte 데이터] : [-48, 2, 0, 0]
파싱 [2byte_To_정수] : 720
파싱 [4byte_To_정수] : 720
/* =========================== */
/* =========================== */
[요약 설명]
* 1. 리틀 엔디안 방식은 낮은 주소(앞쪽공간)에 데이터의 하위(뒤쪽)바이트부터 저장하는 방식입니다
(0x12345678 데이터는 > 78 56 34 12 순으로 저장됩니다)
* 2. 빅 엔디안 방식은 낮은 주소(앞쪽공간)에 데이터의 상위(앞쪽) 바이트부터 저장하는 방식입니다
(0x12345678 데이터는 > 12 34 56 78 순으로 저장됩니다)
* 3. C프로그램은 리틀엔디안 방식으로 저장되며, java는 빅엔디안 방식으로 저장됩니다
* 4. 빅 엔디안과 리틀 엔디안은 단지 저장해야 할 큰 데이터를 어떻게 나누어 저장하는가에 따른 차이일 뿐입니다
/* =========================== */
'Java' 카테고리의 다른 글
110. (java/자바) 삼항식을 사용해서 조건 비교 후 max 최대값 출력 실시 (0) | 2021.01.10 |
---|---|
109. (java/자바) 사용자로부터 사칙연산자 +, -, *, / 값을 입력 받은 후 연산 수행 실시 (1) | 2021.01.10 |
107. (java/자바) string(정수값) to bcd, bcd to String(정수값) 포맷 - bcd 포맷을 수행해 정수값을 바이트값으로 변환 실시 (0) | 2021.01.10 |
106. (java/자바) 문자열 데이터를 base64로 인코딩(암호화), 디코딩(복호화) 수행 실시 (0) | 2021.01.10 |
105. (java/자바) 구구단 출력 - 사용자로부터 단을 입력받아 for문 사용해 출력 실시 (0) | 2021.01.09 |