Преобразование hex строк в число

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by fire64, 6 Oct 2013.

  1. fire64

    fire64 Elder - Старейшина

    Joined:
    1 Apr 2008
    Messages:
    251
    Likes Received:
    22
    Reputations:
    5
    Требуется преобразовать hex строки в числовые значения.
    Гугл посоветовал использовать strtol.

    казалось бы все супер, проверил несколько произвольных значений, вроде все ок, но как добавил его в рабочий код, тут все и началось.

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

    PHP:
            char pTest[MAX_PATH];
            
    memsetpTest0sizeof(pTest) );
            
    sprintfpTest"%.8x", (int)strtol"aa20b5eb"NULL16) );
            
    AfxMessageBoxpTest );
    п.с.
    Решил эту проблему другим способом:
    PHP:
    sscanf(pString indexes[1] + 1"%x", &extractedcrc); 
    Но вопрос остается, почему strtol не работает?
     
    #1 fire64, 6 Oct 2013
    Last edited: 6 Oct 2013
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Вангую проблему из-за signed int.
    http://en.wikipedia.org/wiki/Integer_%28computer_science%29#Common_integral_data_types

    7FFFFFFF = 2,147,483,647
     
    _________________________
  3. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Вариант на плюсах:

    Code:
    #include <iostream>
    #include <sstream>
    
    int main()
    {
    	unsigned int value = 0;
    	std::stringstream ss;
    	ss << "aa20b5eb";
    	ss >> std::hex >> value;
    	std::cout << "Value: " << value << std::endl;
    	return 0;
    }