2010-12-07 4 views
1

Bonjour J'ai un analyseur de chaîne qui reçoit en entrée un nombre hexadécimal: Exemple: chaîne X = « 0x120005f38 »Comment convertir une chaîne en longueur non signée. Avec une touche

Comme vous pouvez voir le nombre est en HEX, comment puis-je convertir cela à non signé longtemps?

S'il s'agissait d'une chaîne décimale, je pourrais utiliser la chaîne pour une fonction longue non signée. Je suppose qu'il y a quelques étapes, et je ne suis pas sûr de l'ordre ou des fonctions à utiliser. 1) Où j'ai besoin de convertir hexadécimal en décimal 2) et String en unsigned long.

Cela semble très difficile pour moi, des idées?

Répondre

7

Utilisation strtoul:

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

strtoul référence cplusplus.com. Voir comment cela fonctionne sur Codepad.

EDIT: Modifié à strtoul, n'a pas remarqué que unsigned long est requis.

+0

+1 pour CodePad! – egrunin

+0

Fantastique cela fonctionne! Merci! – user411287

+0

n'oubliez pas d'accepter la réponse ... –

1

Vous pouvez spécifier le paramètre base de la fonction strtoul, qui autorise un préfixe 0x sur la chaîne.

0

Si tel est littéralement votre code, juste ne font pas un littéral entier avec préfixe 0x: int x = 0x120005f38;

1

Utilisation des flux:

#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'; 
} 
Questions connexes