Восьмеричный эквивалент в C # - PullRequest
42 голосов
/ 22 ноября 2010

На языке C Восьмеричное число можно записать, поставив 00 перед номером, например

Примечание редактора: это одиночный начальный 0, который идентифицирует числовой литералкак восьмеричное значение в С;дополнительные 0 экземпляры не имеют никакого эффекта.

 int i=0012; //equals 10 in decimal

Я нашел эквивалент шестнадцатеричного в C #, поместив 0x перед числом, например

 int i=0xA; //equals 10 in decimal

Теперь мой вопрос: Есть ли в C # эквивалент восьмеричного числа, такой как в C, для представления любого числа в виде восьмеричного числа?

Ответы [ 5 ]

41 голосов
/ 22 ноября 2010

Нет, в C # нет литералов восьмеричных чисел.

Для строк: Convert.ToInt32("12", 8) возвращает 10.

26 голосов
/ 22 ноября 2010

Нет, спецификация языка (ECMA-334) довольно специфична.

4-е издание, стр. 72

9.4.4.2 Целочисленные литералы

Целочисленные литералы используются для записи значений типов int, uint, long и ulong.Целочисленные литералы имеют две возможные формы: десятичную и шестнадцатеричную.

Нет восьмеричной формы.

18 голосов
/ 22 ноября 2010

Нет, в C # нет восьмеричных литералов.

При необходимости вы можете передать строку и основание в Convert.ToInt32, но, очевидно, это далеко не так хорошо, каклитерал:

int i = Convert.ToInt32("12", 8);
5 голосов
/ 22 ноября 2010

Нет, в C # нет восьмеричных чисел.

Использование public static int ToInt32(string value, int fromBase);

fromBase
Type: System.Int32
The base of the number in value, which must be 2, 8, 10, or 16.

MSDN

0 голосов
/ 22 ноября 2010

Нельзя использовать литералы, но вы можете разобрать восьмеричное число: Convert.ToInt32("12", 8).

...