Форматирование чисел - PullRequest
0 голосов
/ 15 декабря 2010

Я пытаюсь создать оболочку C # для библиотеки классов C, управляющей устройством связи по шине USB.Это устройство поддерживает подключение к внешним часам или использование собственных внутренних часов в зависимости от значения, установленного при инициализации устройства.

Изготовитель предоставил заголовочные файлы для своей библиотеки C со следующими переменными #define

#define DATA_SRC_INT = 0x000000000L
#define DATA_SRC_EXT = 0x000000001L
#define DATA_SRC_NONE = 0x00000000FL

Так что это оставляет меня с вопросом.Какое число 0x000000000L представляет точно?

Я понимаю, что этот вопрос может быть упрощенным.В то время, когда я изначально писал этот вопрос, я не видел много переносимого кода на Си.На основании полученных отзывов я попытался уточнить исходный вопрос.

Ответы [ 2 ]

8 голосов
/ 15 декабря 2010

Это long значения 0, 1 и 15 соответственно.Суффикс L указывает на то, что это литерал long, а префикс 0x предназначен для шестнадцатеричных числовых литералов.

В C # вы можете делать то же самое (суффикс L)здесь нет необходимости, так как компилятор уже знает тип и соответствующим образом преобразует - в вашем C-коде определения являются только строковыми заменами, и поэтому тип должен переноситься с ними):

public const long DATA_SRC_INT = 0x0;
public const long DATA_SRC_EXT = 0x1;
public const long DATA_SRC_NONE = 0xF;

Но если толькоШестнадцатеричная запись дает реальное понимание (например, состав битовых полей). Я обычно придерживаюсь десятичных дробей:

public const long DATA_SRC_INT = 0;
public const long DATA_SRC_EXT = 1;
public const long DATA_SRC_NONE = 15;
3 голосов
/ 15 декабря 2010

0x означает, что число в шестнадцатеричном формате.Буква L в конце означает, что она длинная.

Итак ... в списке указаны номера 0, 1 и 15 соответственно.

...