ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 변수를 바이트 단위로 설정하기
    Procademy 2017. 4. 15. 11:22

    unsigned int (32bit) 변수를 바이트 단위로 사용하기


    - unsigned int 변수 = 0 초기값 가짐
    - 키보드로 1 ~ 4 의 바이트 위치를 입력 받고
    - 해당 위치에 넣을 데이터 0 ~ 255 를 입력 받음
    - 사용자가 입력한 바이트 위치에 해당 값을 넣음

    - 데이터가 입력 되면 바이트 단위로 쪼개서 출력 & 4바이트 16진수 출력
    - 기존 데이터는 보존이 되어야 하며
    - 입력된 바이트 위치의 데이터는 기존 값을 지우고 넣음.




    * 특정 위치의 바이트를 0으로 설정하는 방법을 알아보던 중 '마스크' 라는 개념이 있다는 걸 알았다.


    * 바이트 단위로 데이터를 확인할 수 있는 멋진 함수를 찾았다.









    코드

    #include <stdio.h>
    
    void setByte(unsigned int * number, int location, int data);
    void printByByte(void * number);
    
    int main()
    {
        unsigned int number = 0;
        int byteLocation;
        int byteData;
        
        printf("Byte Location(1~4) : ");
        scanf("%d",&byteLocation);
        printf("Data(1~255) : ");
        scanf("%d",&byteData);
        
        setByte(&number,byteLocation,byteData);
        printByByte(&number);
        printf("4bytes value : 0x%08x",number);
        
        return 0;
    }
    
    void setByte(unsigned int * number, int location, int data) {
        // clear
        *number &= ~(0xFF << ((location-1)*8));
        
        // set
        *number |= data << ((location-1)*8);
    }
    
    void printByByte(void * number) {
        unsigned char * pt = number;
        int i;
        for (i=0; i<4; i++) {
            printf("%d ",pt[i]);
        }
    }
    









    참조자료


    http://stackoverflow.com/questions/4439078/how-do-you-set-only-certain-bits-of-a-byte-in-c-without-affecting-the-rest

    http://stackoverflow.com/questions/920511/how-to-visualize-bytes-with-c-c

    'Procademy' 카테고리의 다른 글

    File Packing [패킹 프로그램]  (0) 2017.04.24
    Sin 그래프 출력해보기  (0) 2017.04.15
    변수의 각 비트를 컨트롤 하기  (0) 2017.04.15
Designed by Tistory.