Printf données brutes à une longueur fixe hex de sortie
J'ai un struct, bien pointeur vers une struct, et je souhaite printf n premiers octets comme un long nombre hexadécimal, ou comme une chaîne d'octets hexadécimaux.
En fait, j'ai besoin de l'équivalent de printf de gdb examiner mémoire de commande, x/nxb .
Si possible, je voudrais l'utiliser printf, comme le programme de la fonction d'enregistreur de juste variante de celui-ci. Encore mieux si je peux le faire sans boucle à travers les données.
OriginalL'auteur rhlee | 2012-08-16
Vous devez vous connecter pour publier un commentaire.
Juste pris Eric Postpischil conseils et cuire le suivant :
Il permet d'imprimer les octets comme fas que la structure s'étend.
Mise à jour : Merci pour l'aperçu Eric 🙂 j'ai mis à jour le code.
size_t
type, qui peut différer de la signéint
type “%d” est pour. Et il peut être préférable d'imprimer octets avec “%02x” plutôt que de “%x”. Ce dernier imprime un seul chiffre si la valeur est assez petit.OriginalL'auteur sandyiscool
De l'essayer. Disons que vous avez pointeur sur struct dans
pstruct
.Comme Eric points, cela peut imprimer les octets de dehors-de-commande. Donc c'est soit cela, soit à l'aide de
unsigned char *
et (avoir unprintf
avec 64 arguments ou à l'aide d'une boucle).unsigned char
.char
peut être signé, dans ce cas, la promotion deint
qui se produit lors du passage à printf va causer des valeurs négatives apparaissent sur 32 bits, les valeurs négatives. E. g., l'octet 0xff sera imprimé en tant que “ffffffff”. En outre, “%02x” est un meilleur format à utiliser, car il est probable que vous voulez zéros plutôt que des espaces.Le problème avec cette solution est que j'ai besoin d'imprimer de 64 octets, au lieu de 3.
merci pour les commentaires. non signé est en effet la voie à suivre, et
0
.vous pourriez avoir fait 5 fois de plus, mais je pense que l'utilisation
unsigned long long
travail - oh, attendez, c'est 8 octets, et non pas 64... vous pouvez écrire 64unsigned long long
s dans ce cas. ou vous pouvez faire une boucle. mais peut être plus efficace d'avoir déroulé comme il l'est iciunsigned char
est mieux, cela permettra de montrer les octets de l'adresse de commande. Utilisation plus large de types d'entiers a endian problèmes; il peut afficher les octets de commande.OriginalL'auteur Claudiu