7
votes

Personnage hexagonal à int in c ++

Comment puis-je modifier un caractère hexagonal, pas une chaîne, dans une valeur numérique?

Tout en tapant cette question, j'ai trouvé de nombreuses réponses sur la manière de convertir des chaînes hexagonales en valeurs. Cependant, aucun ne fonctionne pour les caractères. Je me souviens de lire quelque part que cela fonctionne pour les chaînes: xxx

Cependant, si je fais mytr [x] dans une boucle, ce code ne fonctionnera pas . J'ai essayé d'ajouter une nouvelle ligne avec std :: chaîne temp = mystr [x] et changer std :: stringstream (mystr) sur std :: stringstream ( Temp) , mais cela ne fonctionne pas non plus.

Alors, comment dois-je faire ça? Actuellement, je cherche à la recherche d'une chaîne de caractères hexagonales ( "0123456789ABCDEF" .Find (mystr [x]); ) et à l'aide de l'index de la valeur. Cependant, depuis que cela recherche, il est lent, même si ce n'est que la recherche de 16 caractères.

http: // ideone.com/diyd4


2 commentaires

C'est difficile à comprendre ce que vous avez essayé. Pourquoi ne pas publier toutes les variantes que vous avez essayées et expliquez pour chaque pourquoi ils ne fonctionnent pas.


Dupliqué possible de C ++ Convertir une chaîne hexagonale en integer


4 Réponses :


10
votes
int intval = (hexchar >= 'A') ? (hexchar - 'A' + 10) : (hexchar - '0');

3 commentaires

Y a-t-il une version de votre code qui fonctionne avec des caractères hexagonales de différents cas? (par exemple 'a', 'a')


Pour cela, convertissez simplement HexChar en une lettre majuscule avant d'utiliser cette expression.


@QuamRana: J'ai ajouté un soutien minuscule dans ma réponse.



-1
votes

quelque chose comme ce qui suit? xxx


0 commentaires

3
votes

Vous avez déjà une solution qui fonctionne avec des chaînes. Utilisez-le pour Char code> S TOO:

#include <string>
#include <sstream>
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
  char val = 'A';
  unsigned int myval;
  std::stringstream ss;
  ss << val;
  ss >> std::hex >> myval;
  cout << myval << endl;
}


0 commentaires

5
votes

Le ternaire de Levis501 peut être étendu à: xxx pré>

mais si vous voulez vérifier une erreur, il est un peu désordonné: p>

int v = ASCIIHexToInt[c];
if (v < 0)
    // Invalid input


0 commentaires