[C++] ALGOSPOT : ENDIANS


이미지 7

unsigned int 타입은 4 bytes를 할당하는데, 각 byte를 Reverse하는게 문제의 목표이다.

 

char 타입은 1 byte를 할당한다. 따라서 unsigned int 타입을 char[4] 배열로

캐스팅을 하면 쉽게 문제를 풀 수 있다.

#include <iostream>                                        
                                                           
using namespace std;                                       
                                                           
typedef struct{                                            
    char byte_0;                                           
    char byte_1;                                           
    char byte_2;                                           
    char byte_3;                                           
} Byte;                                                   
                                                           
unsigned int convert(unsigned int param){                  
    unsigned int result;                                   
                                                           
    Byte *bytesParam = (Byte*) &param;                   
    Byte *bytesResult = (Byte*) &result;                 
                                                           
    bytesResult->byte_0 = bytesParam->byte_3;              
    bytesResult->byte_1 = bytesParam->byte_2;              
    bytesResult->byte_2 = bytesParam->byte_1;              
    bytesResult->byte_3 = bytesParam->byte_0;              
                                                           
    return result;                                         
}                                                          
int main(){                                                
    int c;                                                 
    cin >> c;                                              
                                                           
    if((c<1) || (c>10000))                                 
        cerr << "invalid input" << endl;                   
                                                           
    unsigned int *inputs = new unsigned int[c];            
                                                           
    for(int i=0; i<c; i++){                                
        cin >> inputs[i];                                  
    }                                                      
                                                           
    for(int i=0; i<c; i++){                                
        cout << convert(inputs[i]) << endl;                
    }                                                      
                                                           
                                                           
}