Comment puis-je imprimer les octets comme hexadécimal?
Je sais en C#, vous pouvez utiliser des chaînes de caractères.Méthode de mise en forme. Mais comment le faire en C++? Est-il une fonction qui me permet de convertir un octet dans un Hex?? Juste besoin de convertir un 8 octets de données en Hexadécimal, comment dois-je faire?
- sprintf() ? fillerfillerfiller
- Désolé, oui je le veux hexademical
Vous devez vous connecter pour publier un commentaire.
Eh bien, vous pouvez convertir un octet (unsigned char) à la fois dans un tableau comme
Si vous souhaitez utiliser C++ flux plutôt que les fonctions C, vous pouvez effectuer les opérations suivantes:
Très simple.
De sortie:
#include <iomanip>
et quehex
,setfill
etsetw
sont tous dans lestd
espace de noms. En outrehex
est persistant, de sorte que vous pouvez tirer en dehors de la boucle, et vous devriez appelerdec
lorsque vous avez terminé de sorte que le flux des impressions futures partie intégrante des valeurs en décimal, en supposant qu'est ce que vous voulez.hex
etsetfill
sont.C:
C++:
Impression d'arbitraire structures en C++ moderne
Toutes les réponses pour l'instant seulement vous dire comment imprimer un tableau d'entiers, mais nous pouvons également imprimer une structure arbitraire, étant donné que nous savons de sa taille. L'exemple ci-dessous crée une telle structure et itère un pointeur à travers ses octets, de l'impression à la sortie:
Et voici le résultat:
Avis cet exemple illustre également alignement de la mémoire de travail. Nous voyons
version
occupant 2 octets (05 00
), suivie parmsgSize
avec plus de 2 octets (24 00
) et puis 4 octets de remplissage, après quoi vientsomeId
(34 12 00 00 00 00 00 00
) etanotherId
(78 56 00 00 00 00 00 00
). PuisisFoo
, qui occupe 1 octet (01
) etisBar
, un autre octet (01
), suivie de 6 octets de remplissage, pour finalement terminer avec la norme IEEE 754 standard de représentation de la double champfloatingPointValue
.Également remarquer que toutes les valeurs sont représentées comme little endian (le moins significatif octets venir en premier), puisqu'il a été compilé et exécuté sur une plate-forme Intel.
Ceci est une version modifiée de la Grignoter à l'Hex méthode
Je ne connais pas de meilleur moyen que d':
Vous pouvez l'accélérer en utilisant une Lichette de Hex méthode
sprintf()
est généralement considéré comme dangereux pour une bonne raison. Ici, l'usage est ok, puisque vous soigneusement allouer suffisamment d'espace, mais en général, je voudrais l'éviter. J'aime le grignotement approche beaucoup mieux.const char* szNibbleToHex
Utiliser C++ de ruisseaux et de restaurer l'état par la suite
C'est une variante de Comment puis-je imprimer les octets comme hexadécimal? mais:
main.cpp
Compiler et exécuter:
De sortie:
Testé sur Ubuntu 16.04, GCC 6.4.0.