Notice
Recent Posts
Recent Comments
Link
투케이2K
70. (java/자바) byte to hex, hex to byte - 바이트 byte, 헥사 hex 데이터간 포맷 실시 본문
/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : 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값으로 표시해 실제로 어떤 바이트값이 들어왔는지 확인할 때 사용한다
/* =========================== */
반응형
'Java' 카테고리의 다른 글
72. (java/자바) 접근 제어자 설명 (private, public, default, protected) (0) | 2021.01.05 |
---|---|
71. (java/자바) 클래스(class) 설명 (0) | 2021.01.05 |
69. (java/자바) 람다식 Rambda 사용해 sum 합계, max 최대값, min 최소값 출력 (0) | 2021.01.05 |
68. (java/자바) 논리 연산자 설명 (0) | 2021.01.05 |
67. (java/자바) 비교 연산자 설명 (0) | 2021.01.05 |
Comments