Je ne sais pas quelle direction aller, peut-être quelque chose comme une réflexion aidera? P>
4 Réponses :
Voici un vidage hexagonal, à propos d'aussi général que possible:
struct Foo x; unsigned int i; const unsigned char * const px = (unsigned char*)&x; for (i = 0; i < sizeof(x); ++i) printf("%02X ", px[i]);
et ajoutez un printf ("\ n") code> à la fin, la sortie ne peut donc pas être tamponnée.
@HEX: "\ n" ne plonge pas nécessairement le tampon, vous devez appeler fflush (stdout) code>. Peut-être que vous pensez à C ++.
Que voulez-vous faire avec votre fichier une fois que vous l'avez? Si cela va être lu à une heure ultérieure, utilisez simplement Ceci donnera une sortie binaire dépend de votre compilateur / plate-forme, tant que ceux-ci sont inchangés, vous devriez aller bien. De là, vous pouvez également nourrir le fichier dans un lecteur hexagonal, etc., bien que vous devez connaître la disposition de la structure pour faire quoi que ce soit utile. P> p> Fread code> et
fwrite code>, comme
La réponse de @kerrek SB fonctionne vraiment bien, je viens de dire comment l'utiliser dans une fonction à l'aide d'un pointeur vide.
int dump(void *myStruct, long size) { unsigned int i; const unsigned char * const px = (unsigned char*)myStruct; for (i = 0; i < size; ++i) { if( i % (sizeof(int) * 8) == 0){ printf("\n%08X ", i); } else if( i % 4 == 0){ printf(" "); } printf("%02X", px[i]); } printf("\n\n"); return 0; } int main(int argc, char const *argv[]) { OneStruct data1, data2; dump(&data1, sizeof(OneStruct)); dump(&data2, sizeof(OneStruct)); return 0; }
Si vous travaillez dans PHP / ZEND Extensions, changez Printf sur php_printf et fonctionne! Bon spectacle!
Si vous utilisez Clang 8 ou plus récent, vous pouvez maintenant utiliser la fonction Compiler intégrée Exemple de code démontrant la fonction: P> Dumptrucduct.c: EM> P > exemple compile-and-exécution: p> si vous n'utilisez pas de clang> = 8 Mais vous utilisez GCC, Il est assez facile de changer. Il suffit d'installer le package Clang-8 ou CLANG-9 et remplacez les invocations de __ intégrée_dump_tructrum code> pour vider une structure. Il utilise les informations naturellement disponibles au moment de la compilation pour générer du code qui imprime plutôt une structure.
gcc code> avec
clang code>. P> p>
C n'a pas de support de réflexion indigène.
Vous devez décoller c pour obtenir une réflexion. Véritable C programmeurs de programmation en hex.
Dupliqué possible de Imprimer une structure en C