Czy istnieje krótsza forma drukowania ciąg w hex następnieOneliner do drukowania ciągów w hex?
uint8_t *m = string;
int c = sizeof(string);
while(c--){
printf("%02x ", *(m++));
}
Czy istnieje krótsza forma drukowania ciąg w hex następnieOneliner do drukowania ciągów w hex?
uint8_t *m = string;
int c = sizeof(string);
while(c--){
printf("%02x ", *(m++));
}
Nie "oneliner", no. Poza tym twój kod wygląda na uszkodzony.
Nie można użyć takiego sizeof
, prawdopodobnie oznacza to strlen()
.
I musisz rzucić znak na typ bez znaku, aby być bezpiecznym.
Tak, coś takiego, może:
void print_hex(const char *s)
{
while(*s)
printf("%02x", (unsigned int) *s++);
printf("\n");
}
Zauważ, że I NIE połączenia strlen()
, ponieważ nie ma sensu iteracji nad ciągiem dwukrotnie po raz zrobi. :)
'sizeof' może być w porządku, jeśli ma do czynienia z prostą tablicą, np. 'uint8_t string [] = {0x01, 0x02, 0x03};'. Jednakże mógłby on mieć jeden po drugim (pętle 'while' czytają zbyt wiele znaków) –
@FrerichRaabe tak, mam tutaj uint8_t [] tutaj ... lepiej używaj' while (- c) ' w moim przypadku? ale potem \ 00 nie jest drukowane ... – reox
@reox: Przepraszam, źle się domyśliłem. Miałem jeden przypadek w moim myśleniu, tak powiem ;-) Myślę, że 'while (c -') będzie dobrze. Jeśli jednak tablica ma zawsze wartość NUL, możesz równie dobrze nie używać zmiennej 'c', a raczej używać' while (* m) '. –
Myślę, że technicznie "ciąg" wprowadza w błąd; wydajesz się drukować tablicę (niekoniecznie zakończoną wartością NULL) o wartościach uint8_t
.
W każdym przypadku potrzebujesz pętli. Jeśli można użyć C99, można napisać
for (size_t i = 0; i < sizeof(string); ++i) printf("%02x", string[i]);
Jeśli tablica jest zakończony zerem, i nie trzeba oryginalną wartość string
(często jest to przypadek, kiedy przechodzącej przez wskaźnik wartość), możesz mieć
static void printArray(const uint8_t *string)
{
while (*string) printf("%02x", *string++);
}
Co sprawia, że zadajesz to pytanie? –
@TonyTheLion po prostu ciekawy – reox