¿Hay alguna forma más corta para la impresión de una cadena en hexadecimal continuaciónOneliner para imprimir una cadena en hexadecimal?
uint8_t *m = string;
int c = sizeof(string);
while(c--){
printf("%02x ", *(m++));
}
¿Hay alguna forma más corta para la impresión de una cadena en hexadecimal continuaciónOneliner para imprimir una cadena en hexadecimal?
uint8_t *m = string;
int c = sizeof(string);
while(c--){
printf("%02x ", *(m++));
}
No "oneliner", no. Además, tu código parece roto.
No puede usar sizeof
así, probablemente se refiera a strlen()
.
Y necesita convertir el personaje en un tipo sin firmar para estar seguro.
Por lo tanto, algo así, tal vez:
void print_hex(const char *s)
{
while(*s)
printf("%02x", (unsigned int) *s++);
printf("\n");
}
Nota que No llamada strlen()
, ya que no hay ningún punto en la iteración en la cadena dos veces cuando una vez es suficiente. :)
'sizeof' puede estar bien si se trata de una matriz simple, p. 'uint8_t string [] = {0x01, 0x02, 0x03};'. Sin embargo, su podría tener un "off-by-one" (los bucles 'while' leen demasiado a un personaje. –
@FrerichRaabe sí, tengo un uint8_t [] aquí ... mejor uso' while (- c) ' en mi caso? pero luego el \ 00 no está impreso ... – reox
@reox: Lo siento, lo he contado mal. Tuve un punto a punto en mi pensamiento, por así decirlo ;-) Creo que 'while (c -') estaría bien. Sin embargo, si la matriz es siempre terminada en nulo, es mejor que no uses la variable 'c', sino que simplemente uses' while (* m) '. –
Creo que técnicamente "cadena" es engañosa aquí; parece que está imprimiendo una matriz (no necesariamente terminada en nulo) de uint8_t
valores.
Necesitará un bucle en cualquier caso. Si se puede usar C99, se podría escribir
for (size_t i = 0; i < sizeof(string); ++i) printf("%02x", string[i]);
Si la matriz es terminada en nulo, y no necesitan que el valor original de string
(esto es a menudo un caso al pasar el puntero por valor), puede tener
static void printArray(const uint8_t *string)
{
while (*string) printf("%02x", *string++);
}
¿Qué te hace esta pregunta? –
@TonyTheLion solo curioso – reox