non v'è alcuna forma più breve per la stampa di una stringa in esadecimale poiOneliner per stampare una stringa in esadecimale?
uint8_t *m = string;
int c = sizeof(string);
while(c--){
printf("%02x ", *(m++));
}
non v'è alcuna forma più breve per la stampa di una stringa in esadecimale poiOneliner per stampare una stringa in esadecimale?
uint8_t *m = string;
int c = sizeof(string);
while(c--){
printf("%02x ", *(m++));
}
No "oneliner", no. Inoltre, il tuo codice sembra rotto.
Non è possibile utilizzare sizeof
in questo modo, probabilmente si intende strlen()
.
Ed è necessario trasmettere il carattere a un tipo senza segno per sicurezza.
Quindi, qualcosa di simile, forse:
void print_hex(const char *s)
{
while(*s)
printf("%02x", (unsigned int) *s++);
printf("\n");
}
Nota che Non chiamata strlen()
, dal momento che non c'è nessun punto nel iterazione sopra la stringa due volte quando una volta lo farà. :)
'sizeof' può andare bene se ha a che fare con un array semplice, ad es. 'uint8_t string [] = {0x01, 0x02, 0x03};'. Tuttavia, il suo potrebbe avere un carattere off-by-one (i cicli 'while' leggono troppo un carattere.) –
@FrerichRaabe si ho un uint8_t [] qui ... meglio usare' while (- c) ' nel mio caso? ma poi il \ 00 non viene stampato ... – reox
@reox: Scusa, ho sbagliato. Avevo un fuori-da-uno nel mio modo di pensare, per così dire ;-) Penso 'while (c -') andrebbe bene. Tuttavia, se la matrice è sempre terminata con null, si potrebbe anche non usare la variabile 'c', ma piuttosto usare' while (* m) '. –
Penso che tecnicamente "stringa" sia fuorviante qui; sembra che stiate stampando un array (non necessariamente a terminazione nulla) dei valori uint8_t
.
Avrete bisogno di un ciclo in ogni caso. Se è possibile utilizzare C99, si potrebbe scrivere
for (size_t i = 0; i < sizeof(string); ++i) printf("%02x", string[i]);
Se la matrice è terminazione Null, e non c'è bisogno il valore originale di string
(questo è spesso il caso quando si passa il puntatore valore), potresti avere
static void printArray(const uint8_t *string)
{
while (*string) printf("%02x", *string++);
}
Cosa ti fa fare questa domanda? –
@TonyTheLion solo curioso – reox