투케이2K

4. (Format/Encryption) [포맷] : [BCD] 포맷 설명 : [Int] [Byte] [Hex] 본문

Format&Encrypt

4. (Format/Encryption) [포맷] : [BCD] 포맷 설명 : [Int] [Byte] [Hex]

투케이2K 2023. 3. 1. 11:06

[구 분]

TITLE : DATA FORMAT

FORMAT : Int , Byte , Hex

 

[BCD 포맷 설명]

1. BCD 란 이진화된 십진수라는 의미입니다

2. BCD 는 십진수 0 ~ 9까지 숫자를 사용합니다

3. BCD 포맷 사용 이유는 원본 2000 이란 데이터를 바이트로 변환하면 4바이트 공간을 사용하게되는데,

   BCD 포맷 을 사용하면 2바이트 만으로 표시할 수 있습니다. (용량감소)


[BCD 포맷 수행 로그]

D///===========//: ================================================
I/: [C_Encryption >> stringToBcdFormat :: 문자열 >> BCD 포맷 바이트 반환 실시]
I/: -----------------------------------------
I/: [INPUT :: 2000]
I/: -----------------------------------------
I/: [HEX ::  0x20 0x00]
I/: -----------------------------------------
I/: [RETURN :: [32, 0]]
D///===========//: ================================================
 

[BCD 포맷 소스 코드]

 

    // -----------------------------------------------------------------------------------------
    // TODO [SEARCH FAST] : [stringToBcdFormat] : 문자열 >> BCD 포맷 바이트 반환
    // -----------------------------------------------------------------------------------------
    public static byte[] stringToBcdFormat(String data){

        /**
         * // -----------------------------------------
         * [stringToBcdFormat 메소드 설명]
         * // -----------------------------------------
         * 1. 문자열 >> BCD 포맷 바이트 반환
         * // -----------------------------------------
         * 2. 호출 방법 : C_Encryption.stringToBcdFormat("2000");
         * // -----------------------------------------
         * 3. 리턴 데이터 :
         * 헥사 : 0x20 0x00
         * 바이트 : [32, 0]
         * // -----------------------------------------
         * */


        // [리턴 데이터 변수 선언 실시]
        byte[] returnData = null;
        String strData = String.valueOf(data);
        String hex = "";


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

            // [널 판단 및 정수 구성 여부 판단 실시]
            if (C_Util.stringNotNull(strData) == true && C_Util.stringIsNumber(strData) == true){ // [널이 아닌 경우]

                // [배열 길이 설정]
                int arrayLength = 0;

                if ( (strData.length()%2) == 0 ){ // [짝수로 나누어 떨어지는 경우]
                    arrayLength = strData.length() / 2;
                }
                else { // [홀수 인 경우]
                    arrayLength = (strData.length() / 2) + 1;
                    strData = "0"+strData; // [짝수로 만듦]
                }
                returnData = new byte[arrayLength];


                // [for 문을 수행하면서 2글자씩 잘라서 hex 문자열 값으로 변경]
                for (int i=0; i<strData.length(); i+=2){

                    int sub = i+2;
                    hex = hex + " " + "0x"+strData.substring(i, sub);

                }


                // [hex string to byte 변환]
                returnData = C_Encryption.hexStringToByteArray(hex);
            }

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


        // [로그 출력 실시]
        ///*
        S_Log.ltd("================================================");
        S_Log.cnt("["+ACTIVITY_NAME+" >> "+C_Util.getNowMethod(1)+" :: 문자열 >> BCD 포맷 바이트 반환 실시]");
        S_Log.cnt("-----------------------------------------");
        S_Log.cnt("[INPUT :: "+String.valueOf(data)+"]");
        S_Log.cnt("-----------------------------------------");
        S_Log.cnt("[HEX :: "+String.valueOf(hex)+"]");
        S_Log.cnt("-----------------------------------------");
        S_Log.cnt("[RETURN :: "+String.valueOf(Arrays.toString(returnData))+"]");
        S_Log.lbd("================================================");
        // */


        // [리턴 데이터 반환 실시]
        return returnData;
    }

 


 

반응형
Comments