2013-05-13 13 views
12

Próbuję przekonwertować znak [] w ASCII na char [] w systemie szesnastkowym.Konwertuj ASCII char [] na szesnastkowy znak [] w C

coś takiego:

cześć -> 68656C6C6F

chcę czytać o klawiaturze ciąg. Musi mieć 16 znaków.

To jest mój kod teraz. Nie wiem, jak wykonać tę operację. Czytałem o strol ale myślę, że po prostu przekonwertować liczbę str int hex ...

#include <stdio.h> 
main() 
{ 
    int i = 0; 
    char word[17]; 

    printf("Intro word:"); 

    fgets(word, 16, stdin); 
    word[16] = '\0'; 
    for(i = 0; i<16; i++){ 
     printf("%c",word[i]); 
    } 
} 

Używam fgets ponieważ czytałem jest lepsza niż fgets ale mogę go zmienić w razie potrzeby.

Próbuję przekonwertować ciąg odczytywany w tablicy uint8_t, łącząc każde 2 bajty w jednym, aby uzyskać liczbę szesnastkową.

Mam tę funkcję, której używam w Arduino, więc myślę, że powinna działać bez problemu w normalnym programie C.

uint8_t* hex_decode(char *in, size_t len, uint8_t *out) 
{ 
    unsigned int i, t, hn, ln; 

    for (t = 0,i = 0; i < len; i+=2,++t) { 

      hn = in[i] > '9' ? (in[i]|32) - 'a' + 10 : in[i] - '0'; 
      ln = in[i+1] > '9' ? (in[i+1]|32) - 'a' + 10 : in[i+1] - '0'; 

      out[t] = (hn << 4) | ln; 
      printf("%s",out[t]); 
    } 
    return out; 

}

Ale gdy zgłoszę tej funkcji w moim kodu, otrzymuję winy segmentacji.

Dodanie tego kodu do kodu pierwszej odpowiedzi:

uint8_t* out; 
    hex_decode(key_DM, sizeof(out_key), out); 

starałem się przekazać wszystkie niezbędne parametry i dostać się na tablicy, co muszę, ale to nie ...

+0

'uint8_t * na zewnątrz;' -> 'uint8_t * out = calloc (sizeof (out_key) sizeof * (z));' lub 'strlen (key_DM) + 1' zamiast' sizeof (out_key) '. – BLUEPIXY

Odpowiedz

10
#include <stdio.h> 
#include <string.h> 

int main(void){ 
    char word[17], outword[33];//17:16+1, 33:16*2+1 
    int i, len; 

    printf("Intro word:"); 
    fgets(word, sizeof(word), stdin); 
    len = strlen(word); 
    if(word[len-1]=='\n') 
     word[--len] = '\0'; 

    for(i = 0; i<len; i++){ 
     sprintf(outword+i*2, "%02X", word[i]); 
    } 
    printf("%s\n", outword); 
    return 0; 
} 
+0

Drukuję tylko na przykład. Ale chcę zapisać ciąg w innym ciągu. Jak mam obsadzić obsadę? – Biribu

+1

@Biribu wyniki tego programu przechowywane w 'outword'. Przesyłanie nie jest konieczne. – BLUEPIXY

+0

Widziałem to teraz. Przepraszam. Właśnie zobaczyłem printf kiedy czytałem. To działa dobrze. Dziękuję bardzo. – Biribu

5

zastąpić to

printf("%c",word[i]); 

przez

printf("%02X",word[i]);