투케이2K

282. (java/자바) [유틸 파일] hex string to byteArray 헥사 문자열 데이터를 바이트 배열로 변환 실시 본문

Java

282. (java/자바) [유틸 파일] hex string to byteArray 헥사 문자열 데이터를 바이트 배열로 변환 실시

투케이2K 2022. 12. 20. 05:29

[개발 환경 설정]

개발 툴 : Eclipse

개발 언어 : Java

 

[소스 코드]

    // TODO [SEARCH FAST] : [hexStringToByteArray] : 헥사 문자열 >> 바이트 배열로 반환
    public static byte[] hexStringToByteArray(String data){

        /**
         * // -----------------------------------------
         * [hexStringToByteArray 메소드 설명]
         * // -----------------------------------------
         * 1. 헥사 문자열 >> 바이트 배열로 반환
         * // -----------------------------------------
         * 2. 호출 방법 : C_Encryption.hexStringToByteArray("0x68 0x65 0x6C 0x6C 0x6F");
         * // -----------------------------------------
         * 3. 리턴 데이터 : byte array 바이트 배열 데이터 [104, 101, 108, 108, 111]
         * // -----------------------------------------
         * */


        // [리턴 데이터 변수 선언 실시]
        byte result[] = null;


        // [로직 처리 실시]
        try {

            // [문자열 데이터 널 판단 수행 실시]
            if (C_Util.stringNotNull(data) == true){ // [널이 아닌 경우]

                // [공백 제거 실시]
                String str = data.replaceAll(" ", "");

                // [헥사 문자열 제거]
                String hex = str.replaceAll("0x", "");
                hex = hex.replaceAll("0X", "");
                hex = hex.toUpperCase();

                // [문자열 체크 실시 (나누기 2)]
                if (C_Util.stringNotNull(hex) == true){

                    boolean intCount = (hex.length() % 2) == 0;

                    if (intCount == true){ // [짝수 일 경우 : 정상]

                        try {
                            byte[] temp = new byte[hex.length() / 2];
                            for(int i = 0; i < hex.length() / 2; ++i) {
                                temp[i] = toByte(hex.substring(i * 2, i * 2 + 2));
                            }

                            // [리턴 데이터 삽입]
                            result = temp;
                        }
                        catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                }
                else {
                    Log.i("---","---" + "\n");
                    Log.e("//===========//","================================================");
                    Log.i("","\n"+"[C_Encryption >> hexStringToByteArray() :: 헥사 문자열 >> 바이트 배열로 반환 실시]");
                    Log.i("","\n"+"-----------------------------------------");
                    Log.i("","\n"+"[error :: "+ "hex string null 널 임" +"]");
                    Log.e("//===========//","================================================");
                    Log.i("---","---" + "\n");
                }
            }
            else {
                Log.i("---","---" + "\n");
                Log.e("//===========//","================================================");
                Log.i("","\n"+"[C_Encryption >> hexStringToByteArray() :: 헥사 문자열 >> 바이트 배열로 반환 실시]");
                Log.i("","\n"+"-----------------------------------------");
                Log.i("","\n"+"[error :: "+ "데이터 null 널 임" +"]");
                Log.e("//===========//","================================================");
                Log.i("---","---" + "\n");
            }

        }
        catch (Exception e){
            e.printStackTrace();
        }


        // [로그 출력 실시]
        ///*
        Log.i("---","---");
        Log.d("//===========//","================================================");
        Log.i("","\n"+"[C_Encryption >> hexStringToByteArray() :: 헥사 문자열 >> 바이트 배열로 반환 실시]");
        Log.i("","\n"+"-----------------------------------------");
        Log.i("","\n"+"[INPUT :: "+String.valueOf(data)+"]");
        Log.i("","\n"+"-----------------------------------------");
        Log.i("","\n"+"[RETURN :: "+String.valueOf(Arrays.toString(result))+"]");
        Log.d("//===========//","================================================");
        Log.i("---","---");
        // */


        // [리턴 데이터 반환 실시]
        return result;
    }
    public static byte toByte(String hexStr) {
        byte result = 0;
        String hex = hexStr.toUpperCase();
        for(int i = 0; i < hex.length(); ++i) {
            char c = hex.charAt(hex.length() - i - 1);
            byte b = toByte(c);
            result = (byte)(result | (b & 15) << i * 4);
        }
        return result;
    }
    private static byte toByte(char c) {
        switch(c) {
            case '0':
                return 0;
            case '1':
                return 1;
            case '2':
                return 2;
            case '3':
                return 3;
            case '4':
                return 4;
            case '5':
                return 5;
            case '6':
                return 6;
            case '7':
                return 7;
            case '8':
                return 8;
            case '9':
                return 9;
            case ':':
            case ';':
            case '<':
            case '=':
            case '>':
            case '?':
            case '@':
            default:
                return 0;
            case 'A':
                return 10;
            case 'B':
                return 11;
            case 'C':
                return 12;
            case 'D':
                return 13;
            case 'E':
                return 14;
            case 'F':
                return 15;
        }
    }
 

[결과 출력]


반응형
Comments