2010-08-18 3 views
1

아시다시피 C enum은 부호없는 정수입니다. 그러나 이것은 구현에 따라 다를 수 있습니다. 이진 표현으로 열거 형에 어떤 형식을 사용해야합니까?C enum의 이진 표현에 어떤 형식을 사용해야합니까?

* PS '이진 표현'은 바이트 배열을 의미합니다. 열거 형 값을 소켓에 직렬화하여 다른 프로그램과 상호 운용하려고합니다.

+2

'enum'은 정수형입니다. 그것은 서명되지 않았습니다. "이진 표현에서 enum"이란 무엇을 의미합니까? 예제를 제공해 줄 수 있습니까? 비트 마스크에 적합한 유형을 원한다는 뜻입니까? – jamesdlin

+0

귀하의 질문은 명확하지 않습니다. 주 : _ 열거 형 상수의 값을 정의하는 표현식은 정수로 표현되는 정수식 이어야합니다.'열거 형은 '부호없는 정수'가 올바르지 않다고 가정합니다. – dirkgently

+0

내 질문이 업데이트되었습니다. 성함을 불안하게해서 죄송합니다. – Eonil

답변

1

그것은이 enum 유형을 표시하는 int를 사용하도록 컴파일러에게 달려, 또는 longint는 IF가 enum의 모든 값을 저장하기에 충분하지 않습니다. 귀하의 모든 enum 값이 int으로 표현 될 수 있다는 것을 알고있는 경우

, 당신은 안전하게 enum 값의 이진 표현으로 int를 사용할 수 있습니다.

+0

당신 말이 맞아요. 내 컴파일러의 정확한 사양을 알아야합니다. 나는 이것에 대한 새로운 질문을 열었다. http://stackoverflow.com/questions/3509552/whats-the-data-type-of-c-enum-of-clang-compiler – Eonil

+0

흠, 나는 그렇게 생각하지 않는다. 그 이유 때문에 '길다', 어쩌면 스펙이 '길다'는 것을 허용 할 수도 있습니다. 모든 열거 타입 상수는 정의에 따라'int'이므로'int'는 항상 모든 값을 가질 수 있습니다. –

0

어떨까요? xdr - 외부 데이터 표현을위한 라이브러리 루틴은 어떻습니까?

휠을 재 활성화하면 드물게 더 나은 것이 생성됩니다.

1

열거 형은 정수를 설정하는 멋진 방법이므로 모든 열거 형 값을 저장할만큼 큰 정수형을 사용해야합니다. 일반적으로 숯불로 충분해야하며 직렬화 문제가 없습니다. 그러나 나는 대신 짧거나 길게 갈 것입니다. 직렬화 할 때는 항상 ntohs/htons 또는 ntohl/htonl (매뉴얼 페이지 참조)을 사용하여 직렬화가 네트워크 바이트 순서로되어 있고 직렬화가 호스트 바이트 순서로되어 있는지 확인하십시오.

관련 문제