[Socket] 연습문제 1

조아리 ㅣ 2024. 7. 3. 10:00

반응형

Q. 4바이트로 표현된 숫자의 바이트 순서를 바꾸는 프로그램을 작성하시오. 예를 들어 16진수 0x12345678을 입력하면 0x78563412가 출력하도록 하시오. 순서를 바꾸는 함수의 프로토타입을 아래와 같이 작성하시오. 아래에서 before 인자는 바이트 순서를 바꾸기 전의 값이고 함수의 리턴값은 바이트 순서가 바뀐 후의 값입니다.

 

unsigned int convert_order32 (unsigned int before);

 

/* -------------------------------------------
 * 파일명:convert_order.c
 * 기 능 :4 바이트로 표현된 숫자의 바이트 순서를 바꾸는 프로그램
 * 컴파일:gcc convert_order.c -o convert_order
 * 사용법:./convert_order
 * -------------------------------------------*/

#include <stdio.h>

unsigned int convert_order32(unsigned int before){
    int i;
    int bfLen = 0;
    unsigned int mem = before;
    
// 8씩 시프트 시키기 위해 반복 횟수를 구하기
    for(mem; mem > 0; mem >>= 8){
        bfLen++;
    }
    
// 8씩 시프트, 8 비트씩 추출
    unsigned after = 0;
    for(i = 0; i < bfLen; i++){
    // 기존 비트를 높은 비트로 시프트 후에 추출한 8비트를 or시켜주기
        after = (after << 8) | (before & 0xFF);
        before >>= 8;
    }

    return after;
}

int main(){
    printf("입력 : 0x");
    unsigned int before;
    scanf("%x", &before);
    unsigned int after = convert_order32(before);

    printf("출력 : 0x%x\n", after);

    return 0;
}

 

 

실행 결과

$ ./convert_order
입력 : 0x

<입력&출력>
$ ./convert_order
입력 : 0x12345678
출력 : 0x78563412

 

반응형