1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | /*큰 엔디안을 작은 엔디안으로 혹은 그 반대로 변환하는 코드*/ #pragma GCC diagnostic ignored "-Wpedantic" #include <iostream> using namespace std; union endian { //메모리 공간을 공통으로 사용할 때 사용 unsigned int value; struct { //4바이트를 1바이트씩 자름(8비트) unsigned int val1 : 8; unsigned int val2 : 8; unsigned int val3 : 8; unsigned int val4 : 8; }; }; int main(){ int count; //숫자를 입력받을 횟수 endian Endian; //변환할 수를 저장 endian conv_Endian; //변환된 수를 저장 cin>>count; //입력받은 횟수만큼 for(int i=0;i<count;i++){ cin>>Endian.value; conv_Endian.val1 = Endian.val4; conv_Endian.val2 = Endian.val3; conv_Endian.val3 = Endian.val2; conv_Endian.val4 = Endian.val1; cout<<conv_Endian.value<<endl; } return 0; } | cs |
ISO C++ prohibits anonymous structs [-Wpedantic]
이라는 컴파일 오류가 떴었음
구조체에 이름이 없어서 생긴 오류인듯 함
#pragma GCC diagnostic ignored "-Wpedantic" 를 추가하였더니 오류가 제거됨
+이유를 알았다!
struct NAME{/*...*/}; 이 아니라 struct {/*...*/}NAME; 으로 해야 되는 거였음
바꿔서 했더니 됐다.
근데 왜케 오래걸리지..ㄷㄷ
+ http://air802.tistory.com/123
포인터와 엔디안에 대해 조금 더 잘 알 수 있게 되었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | /*큰 엔디안을 작은 엔디안으로 혹은 그 반대로 변환하는 코드*/ //#pragma GCC diagnostic ignored "-Wpedantic" #include <iostream> using namespace std; union endian { //메모리 공간을 공통으로 사용할 때 사용 unsigned int value_int; struct { //4바이트를 1바이트씩 자름(8비트) unsigned int val1 : 8; unsigned int val2 : 8; unsigned int val3 : 8; unsigned int val4 : 8; }value; }; int main(){ int count; //숫자를 입력받을 횟수 endian Endian; //변환할 수를 저장 endian conv_Endian; //변환된 수를 저장 cin>>count; //입력받은 횟수만큼 for(int i=0;i<count;i++){ cin>>Endian.value_int; conv_Endian.value.val1 = Endian.value.val4; conv_Endian.value.val2 = Endian.value.val3; conv_Endian.value.val3 = Endian.value.val2; conv_Endian.value.val4 = Endian.value.val1; cout<<conv_Endian.value_int<<endl; } return 0; } | cs |