Какой тип я должен использовать для двоичного представления перечисления C? - PullRequest
2 голосов
/ 18 августа 2010

Как я знаю, C enum является целым числом без знака, но это может варьироваться в зависимости от реализации. Какой тип я должен использовать для перечисления в двоичном представлении?

* PS «двоичное представление» означает байтовый массив. Я хочу сериализовать значения enum в сокет для взаимодействия с другими программами.

Ответы [ 3 ]

2 голосов
/ 18 августа 2010

Компилятор должен использовать int для представления типа enum или long, если int недостаточно для хранения всех значений enum.

Если вы знаете, что все ваши enum значения могут быть представлены int, то вы можете безопасно использовать int в качестве двоичного представления ваших enum значений.

1 голос
/ 18 августа 2010

Поскольку перечисления - это просто причудливые способы задания целых чисел, вы должны выбрать целочисленный тип, достаточно большой для хранения всех значений перечисления. Обычно должно быть достаточно символа, и тогда нет проблем с сериализацией. Но я бы пошел на короткий или длинный вместо этого. При сериализации я бы использовал ntohs/htons или ntohl/htonl (см. Их справочные страницы), чтобы всегда убедиться, что сериализация выполняется в сетевом порядке байтов, а десериализация - в порядке байтов хоста.

0 голосов
/ 18 августа 2010

Как насчет xdr - библиотечные процедуры для представления внешних данных?

Изобретая колесо, редко получается что-то лучше.

...