Преобразуйте символьную цифру в соответствующее целое число в C

При проверке, существует ли запись, используйте EXISTS / NOT EXISTS. COUNT() будет фактически считать все строки, в то время как EXISTS будет закорачивать в первом ряду, таким образом, это будет быстрее.

IF EXISTS (SELECT 'record this year' FROM [TABLE] T WHERE T.employee_Id = '$CurrentUserId 

Если вам нужно это в 1 SELECT утверждении, вы можете использовать решение Дирендры.

AND T.CreatedOn > DATEADD(YEAR,-1,GETDATE())) BEGIN -- Do stuff if record this last year END ELSE BEGIN -- Do stuff if no record this last year END

Если вам нужно это в 1 SELECT утверждении, вы можете использовать решение Дирендры.

90
задан nbro 17 March 2017 в 13:20
поделиться

8 ответов

Согласно другим ответам, это прекрасно:

char c = '5';
int x = c - '0';

кроме того, для проверки ошибок, можно хотеть проверить, что isdigit (c) верен сначала. Обратите внимание, что Вы не можете полностью портативно сделать того же для букв, например:

char c = 'b';
int x = c - 'a'; // x is now not necessarily 1

стандарт гарантирует, что символьные значения для цифр '0' к '9' непрерывны, но не делает гарантий других символов как буквы алфавита.

128
ответ дан Chris Young 24 November 2019 в 07:01
поделиться

Вычтите '0' как это:

int i = c - '0';

Стандарт C гарантирует, что каждая цифра в диапазоне '0'..'9' является одним большим, чем его предыдущая цифра (в разделе 5.2.1/3 из проект C99). Те же счета для C++.

39
ответ дан Johannes Schaub - litb 24 November 2019 в 07:01
поделиться

Если по некоторому сумасшедшему совпадению Вы хотите преобразовать строка из символов к целому числу, можно сделать это также!

char *num = "1024";
int val = atoi(num); // atoi = ASCII TO Int

val теперь 1024. По-видимому atoi() прекрасен, и что я сказал об этом ранее, только относится ко мне (на OS X (возможно (вставьте шутку Lisp здесь))). Я услышал, что это - макрос, который отображается примерно на следующий пример, который использует strtol(), функция более общего назначения, чтобы сделать преобразование вместо этого:

char *num = "1024";
int val = (int)strtol(num, (char **)NULL, 10); // strtol = STRing TO Long

strtol() работы как это:

long strtol(const char *str, char **endptr, int base);

Это преобразовывает *str в long, рассматривая его, как будто это была основа base число. Если **endptr не является пустым, это содержит первый символ нецифры strtol() найденный (но кто заботится об этом).

27
ответ дан Columbia says Reinstate Monica 24 November 2019 в 07:01
поделиться
char numeralChar = '4';
int numeral = (int) (numeralChar - '0');
5
ответ дан Kevin Conner 24 November 2019 в 07:01
поделиться

Если это - просто отдельный символ 0-9 в ASCII, то вычитание значение нулевого символа ASCII от значения ASCII должно хорошо работать.

, Если Вы хотите преобразовать большее число тогда, следующее сделает:

char *string = "24";

int value;

int assigned = sscanf(string, "%d", &value);

** не забывают проверять состояние (который должен быть 1, если бы оно работало в вышеупомянутом случае).

Paul.

0
ответ дан Paul W Homer 24 November 2019 в 07:01
поделиться
char chVal = '5';
char chIndex;

if ((chVal >= '0') && (chVal <= '9')) {

    chIndex = chVal - '0';
}
else 
if ((chVal >= 'a') && (chVal <= 'z')) {

    chIndex = chVal - 'a';
}
else 
if ((chVal >= 'A') && (chVal <= 'Z')) {

    chIndex = chVal - 'A';
}
else {
    chIndex = -1; // Error value !!!
}
0
ответ дан Evan Teran 24 November 2019 в 07:01
поделиться

Вы бросили бы его к интервалу (или плавание или дважды или что когда-либо еще Вы хотите сделать с ним), и сохраните его в другой переменной.

-3
ответ дан SeanJA 24 November 2019 в 07:01
поделиться

Когда мне нужно сделать что-то подобное, я предварительно запекаю массив с нужными мне значениями.

const static int lookup[256] = { -1, ..., 0,1,2,3,4,5,6,7,8,9, .... };

Тогда преобразование несложно

int digit_to_int( unsigned char c ) { return lookup[ static_cast<int>(c) ]; }

Это в основном подход, используемый многими реализациями библиотеки ctype. Вы можете легко адаптировать его для работы с шестнадцатеричными цифрами.

0
ответ дан 24 November 2019 в 07:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: