Как преобразовать строку в длинную без знака. С изюминкой - PullRequest
1 голос
/ 07 декабря 2010

Здравствуйте. У меня есть синтаксический анализатор строк, который получает в качестве входных данных шестнадцатеричное число: Например: String X = "0x120005f38"

Как вы можете видеть, число находится в HEX, как мне преобразовать его в беззнаковоедолго?

Если бы это была строка на основе десятичной дроби, я мог бы использовать эту строку для функции unsigned long.Я предполагаю, что есть несколько шагов, и я не уверен, какой порядок или функции использовать.1) Где мне нужно преобразовать Hex в десятичную 2) и String в unsigned long.

Это кажется мне очень сложным, какие-либо идеи?

Ответы [ 4 ]

7 голосов
/ 07 декабря 2010

Использование strtoul:

strtoul("0x120005f3", 0, 0);

strtoul ссылка на cplusplus.com . Посмотрите, как это работает на Codepad .

РЕДАКТИРОВАТЬ: Изменено на strtoul, не заметил, что unsigned long требуется.

1 голос
/ 08 декабря 2010

Использование потоков:

#include <iostream>
#include <sstream>
int main()
{
    const char* X="0x120005f38";
    std::stringstream ss(X);
    long long var;  //your value is too large for my long
    ss >> std::hex >> var;
    std::cout << var << ' ' << std::hex << var << '\n';
}
1 голос
/ 07 декабря 2010

Вы можете указать параметр base функции strtoul, который разрешает префикс 0x в строке.

0 голосов
/ 07 декабря 2010

Если это буквально ваш код, просто не делайте его буквальным целым числом с префиксом 0x: int x = 0x120005f38;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...