투케이2K

70. (java/자바) byte to hex, hex to byte - 바이트 byte, 헥사 hex 데이터간 포맷 실시 본문

Java

70. (java/자바) byte to hex, hex to byte - 바이트 byte, 헥사 hex 데이터간 포맷 실시

투케이2K 2021. 1. 5. 15:46

/* =========================== */

[ 개발 환경 설정 ]

개발 툴 : Eclipse

개발 언어 : Java

/* =========================== */

/* =========================== */

[소스 코드]

 

package AI2;

import java.util.Arrays;

public class MainActivity20 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("[byte to hex, hex to byte - 바이트 byte, 헥사 hex 데이터간 포맷 실시]");
		
		/*[설 명]
		 * 1. hex란 ? 16진수 표기입니다
		 * 2. 사용이유 ? - 바이트를 사용해 통신을 주고 받을 시 new String으로 바이트값을 출력하게 되면 
		 *              데이터 변환 과정 중 데이터가 깨져서 출력되거나, 표시되지 않는 데이터들이 있다
		 *            - 이럴 경우 hex값으로 표시해 실제로 어떤 바이트값이 들어왔는지 확인할 때 사용한다  
		 */
		
		//바이트 값을 hex값으로 변환 수행
		byte one[] = {2, 10, 68, 54, 3};
		String hexData = getByte_To_HexString(one);
		System.out.println("원본 byte : "+Arrays.toString(one));
		System.out.println("포맷 byte > hex : "+hexData);
		System.out.println("");
		
		//hex값을 다시 바이트값으로 변환 수행
		byte two[] = getHexString_To_Byte(hexData);
		System.out.println("원본 hex : "+hexData);
		System.out.println("포맷 hex > byte : "+Arrays.toString(two));
		
	}//메인 종료
	
	//hex 표시된 데이터를 바이트 값으로 변경
	public static byte[] getHexString_To_Byte(String data) {
		String hex = data.replaceAll("0x", ""); //0x문자 제거
		String Trim = hex.replaceAll(" ", ""); //공백문자 제거
		byte arr[] = new byte[Trim.length()/2]; //전체 문자열 길이/2만큼 배열 생성
		int before = 0;
		int after = 2;
		for(int i=0; i<arr.length; i++) {
			String value = Trim.substring(before, after); //2글자씩 잘라서 데이터 출력
			arr[i] = new java.math.BigInteger(value, 16).byteValue(); //BigInteger사용해 hexString > byte 변환
			//다음 2글자씩 또 변환하기 위함
			before += 2; 
			after += 2;
		}
		return arr;
	}
    
	//바이트로 저장된 값을 hex(16 진수로 표현)
	public static String getByte_To_HexString(byte buf[]) { 
		String Hex_Value = "";
		for(int i=0; i<buf.length; i++) {
			Hex_Value += String.format("0x%02x ", buf[i]); //x가 소문자면 소문자 출력, 대문자면 대문자 출력
		}    
		return Hex_Value;
	}

}//클래스 종료

/* =========================== */

[결과 출력]

[byte to hex, hex to byte - 바이트 byte, 헥사 hex 데이터간 포맷 실시]

원본 byte : [2, 10, 68, 54, 3]

포맷 byte > hex : 0x02 0x0a 0x44 0x36 0x03

원본 hex : 0x02 0x0a 0x44 0x36 0x03

포맷 hex > byte : [2, 10, 68, 54, 3]

/* =========================== */

/* =========================== */

[요약 설명]

* 1. hex란 ? 16진수 표기입니다

* 2. 사용이유 ? - 바이트를 사용해 통신을 주고 받을 시 new String으로 바이트값을 출력하게 되면

                      데이터 변환 과정 중 데이터가 깨져서 출력되거나, 표시되지 않는 데이터들이 있다

                   - 이럴 경우 hex값으로 표시해 실제로 어떤 바이트값이 들어왔는지 확인할 때 사용한다

/* =========================== */

반응형
Comments