Je me demande comment convertir une chaîne hexagonale en une chaîne lisible humaine (si cela a du sens) Ce serait ma première vraie rencontre avec des valeurs hexagonales, donc j'apprends toujours à leur sujet et comment les gérer. < / p>
J'ai un programme qui lit dans les données d'un fichier contenant des données de paquets brutes (hex) et j'ai besoin d'analyser ces informations afin qu'elle soit lisible par l'homme. P>
Un exemple de ce que j'ai besoin de faire est quelque chose comme ce site fait http: //home2.paulschou .NET / TOOLS / XLATE / Où vous pouvez mettre en hexagone et l'avoir converti en texte. P>
4 Réponses :
fprintf(file, "%h", thing); Something along those lines?
C ++ - façon ish pour obtenir une chaîne contenant la représentation hexadécimale d'un nombre donné est d'utiliser le hex code> modificateur de flux, comme dans cet exemple:
const string hexData = "414243";
assert( hexData.size() % 2 == 0 );
ostringstream asciiStream;
istringstream hexDataStream( hexData );
vector<char> buf( 3 ); // two chars for the hex char, one for trailing zero
while ( hexDataStream.good() ) {
hexDataStream.get( &buf[0], buf.size() );
if ( hexDataStream.good() ) {
asciiStream << static_cast<char>( std::strtol( &buf[0], 0, 16 ) );
}
}
const string asciiData = asciiStream.str(); // asciiData == "ABC"
Je suis un peu confus, tout ce qui semble faire est de stocker l'hexagone dans une ficelle? Je dois convertir les données hexagonales en une chaîne lisible de ses données hexagonales, telles que home2.paulschou.net/ Outils / XLATE Ce type de site Web fait.
Il donne la représentation hexadécimale d'un nombre, de droite. Que voulez-vous dire avec "Données hexagonales"? Les données d'entrée sont-elles une chaîne avec les caractères "414243" et vous souhaitez convertir cela en par exemple. "ABC" (parce que c'est ce que le site Web fait)?
Oui, je veux le convertir en « ABC » ce 1062000000000002000100024177616b656e65642d4465760036372e3232 382e35302e3232333a38 30383500000000000902 2c010000576f57547261 6e63652d4177616b656e 696e670036372e323238 2e34392e39303a383038 3500000000000a contient des chaînes et une adresse IP du serveur que je suis les données à partir, je voudrais pouvoir Convertissez les données ci-dessus en format que je peux lire les valeurs qu'il contient.
C'était semblable à ce que j'essayais de faire plus tôt, mais cela donne les mêmes résultats pour une raison quelconque, il semble afficher uniquement les deux premiers caractères lorsqu'ils sont imprimés, je ne sais pas pourquoi la longueur de la chaîne est défiant Ce qui est imprimé, les données que je suis analysé contiennent un caractère de terminaison qui interfère dans l'impression?
Si j'utilise la chaîne d'exemple (longue) de votre commentaire dans mon code mis à jour, je peux en effet voir des chaînes et une adresse IP. J'ai simplement utilisé mon code ci-dessus et j'ai ajouté un 'COUT << asciidata << endl;' jusqu'à la fin. Peut-être que vous utilisez l'API C pour imprimer la chaîne et le troisième octet '00' (un octet nul!) Terminez la sortie de la chaîne.
Oh oui ça a fonctionné, j'avais .c_str () sur la sortie, merci beaucoup ça va vraiment m'aider à avancer avec mon application =).
HEX est un moyen d'afficher des données binaires. Ce n'est pas des "données brutes" comme vous le dites. Si les données brutes que vous avez contenues une chaîne, vous devriez être capable de voir la chaîne (éventuellement entre autres ordures) lorsque vous la sortiez à l'écran.
Voici une boucle pour imprimer les caractères ASCII dans un bloc de données. Pour obtenir autre chose, vous devrez faire face à son format. P>
Ce n'est pas une réponse à la question, vous essayez de trouver des caractères ASCII et d'l'afficher. Pourquoi allouez-vous un tampon de pointeurs lors de la lecture de personnages? Pourquoi essayez-vous d'attribuer l'adresse de ce tableau de pointeur au pointeur de char (ne doit pas compiler)? Pourquoi utilisez-vous la sortie d'erreur?
@HARPER: Je présumé qu'il était confus sur la nature des données binaires et qu'il n'avait pas en réalité de données de texte codées comme Hex-in-ASCII. Pour imprimer la partie de texte de certaines données que vous regardez autrement en tant qu'hex avec un autre programme, vous saurez les caractères non-ASCII. Le tampon des pointeurs est une faute de frappe, doit être un tampon de charme ordinaire. La sortie d'erreur est parce que j'associe ce genre de chose avec le débogage et j'utilise Cerr code> pour le débogage afin d'éviter toute interférence avec la sortie "réelle" d'un programme.
pris à partir du bibliothèque de la boîte à outils C ++ (Strtk) Bibliothèque, ce qui suit devrait suffire. Notez que OUT doit pointer sur un morceau de mémoire la moitié de la taille de STD :: Distance (début, fin) et que les valeurs de la gamme de [début, fin) sont 0-9A-F ou 0-9A-F
Pour clarifier: Vous souhaitez prendre des données binaires et l'afficher en format hexagonal?
Je souhaite prendre des données de paquet brutes qui sont stockées en hexagone et le convertir de HEX en un format lisible humain.
Les données brutes sont essentiellement binaires, Hexidecimal est un moyen plus facile de le lire, car tous les quatre chiffres binaires peuvent être lus comme un seul chiffre hexagonal.
J'ai besoin de convertir des données qui se trouve dans un format comme celui-ci: 0000008F74D89D0FE4CACA7F585F35049 à ses véritables valeurs
Ce site a plusieurs options de conversion. Pouvez-vous donner, dans le code source, un exemple de données d'entrée, puis un exemple de sortie que vous souhaitez voir? "
f (...) code> devrait produire ...", remplissez les ellipses.
La partie du site que je faisais référence à la partie où vous pouvez mettre en données hexagonales et appuyer sur décodation / convertir et le voir affiché dans le format texte. Un exemple de données en cours soit ce 0000008f74d89d0fe4caca7f585f35049 Ce que j'aimerais voir que les données de texte converties des données hexagonales, alors quelque chose comme "Mon nom est franc" Je n'ai pas de code source car je n'ai pas pensé Sur la façon de le faire, j'ai beaucoup de mal à l'expliquer à droite = (.
Est-ce ce que vous voulez,
f ("6672616e6b") code> sorties "frank"?
Ce n'est pas une question très utile. Peut-être que quelqu'un pourrait comprendre ce qu'il voulait réellement et reformuler la question?