2014-12-01 3 views
0

Я разбираю строку, и я ожидаю, что вы разберем число с 6 цифрами. Я также знаю, что это число с 6 цифрами, поэтому оно будет соответствовать непроизведенному int.Анализ без знака int известного размера

Какой способ лучше разобрать его? с использованием atoi, а затем литье в unsigned int или использование strtoul (который возвращает unsigned long int), а затем литье в unsigned int?

есть ли другой способ, о котором я не думал? спасибо

+0

Другая возможность: 'sscanf (ул,«% U», & вар)' – Tomo

ответ

-1

Ну, самая простая версия будет stoul в C++.

unsigned int i = stoul(str); 

Но если вы хотите сделать это непосредственно, и это действительно критичной по времени вы также можете сделать это явно, так как вы знаете, количество цифр:

unsigned int i = 
    static_cast<unsigned int>(str[5]-'0') * 1ul 
+ static_cast<unsigned int>(str[4]-'0') * 10ul 
+ static_cast<unsigned int>(str[3]-'0') * 100ul 
+ static_cast<unsigned int>(str[2]-'0') * 1000ul 
+ static_cast<unsigned int>(str[1]-'0') * 10000ul 
+ static_cast<unsigned int>(str[0]-'0') * 100000ul; 

Но я бы настоятельно рекомендую идти с stoul.

+0

Вы не можете использовать битмаски для всего , битовая маска! '|' здесь не работает - вам нужно использовать '+'. – TonyK

+0

@TonyK: Вы абсолютно правы! Спасибо. Не знаю, о чем я думал! – bitmask

1

, если вы знаете, как ваша строка будет выглядеть, вы можете просто использовать sscanf

sscanf(yourStringBuffer, "%ud", &unsingedIntVariable); 
Смежные вопросы