Je peux imprimer avec printf comme un nombre hexadécimal ou octal. Y a-t-il une balise de format à imprimer en base binaire, ou arbitraire ?
Je suis sous gcc.
Je peux imprimer avec printf comme un nombre hexadécimal ou octal. Y a-t-il une balise de format à imprimer en base binaire, ou arbitraire ?
Je suis sous gcc.
Hacky, mais fonctionne pour moi :
...
Pour les types de plusieurs octets
Vous devez tous les extras « s malheureusement. Cette approche a des risques de l’efficacité des macros (ne pas passer une fonction comme argument à la BYTETOBINARY), mais évite les problèmes de mémoire et plusieurs appels de strcat dans certaines autres propositions ici.
Voici un petit hack pour démontrer des techniques pour faire ce que vous voulez.
#include <stdio.h> /* printf */
#include <string.h> /* strcat */
#include <stdlib.h> /* strtol */
const char *byte_to_binary(int x)
{
static char b[9];
b[0] = '\0';
int z;
for (z = 128; z > 0; z >>= 1)
{
strcat(b, ((x & z) == z) ? "1" : "0");
}
return b;
}
int main(void)
{
{
/* binary string to int */
char *tmp;
char *b = "0101";
printf("%d\n", strtol(b, &tmp, 2));
}
{
/* byte to binary string */
printf("%s\n", byte_to_binary(5));
}
return 0;
}
Il n'y a pas une conversion en binaire rédacteur de devis dans la glibc, normalement.
Il est possible d'ajouter des types de conversion pour le printf() de la famille de fonctions dans la glibc. Voir register_printf_function pour plus de détails. Vous pouvez ajouter une coutume %b de conversion pour votre propre usage, s'il simplifie le code de l'application de la disposition.
Voici un exemple de la façon de mettre en œuvre une coutume formats de printf dans la glibc.
Voici une version de la fonction qui ne souffre pas de réentrance délivre ou limite sur la taille/type de l’argument :
Notez que ce code fonctionnerait tout aussi bien pour n’importe quelle base entre 2 et 10 si vous suffit de remplacer les 2 par la base désirée. Son utilisation est :
Où `` est une expression intégrale.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.