2013-05-13 7 views
12

में कनवर्ट करें मैं हेक्साडेसिमल में एएससीआईआई में char [] में एक char [] को परिवर्तित करने की कोशिश कर रहा हूं।एसीआई चार [] से हेक्साडेसिमल चार [] में सी

कुछ इस तरह:

हैलो -> 68656C6C6F

मैं कुंजीपटल द्वारा स्ट्रिंग पढ़ना चाहते हैं। यह 16 वर्ण लंबा होना चाहिए।

यह मेरा कोड है अब। मुझे नहीं पता कि ऑपरेशन कैसे करें। मैं strol के बारे में पढ़ा है, लेकिन मैं यह सिर्फ हेक्स int करने के लिए str संख्या परिवर्तित लगता है ...

#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]); 
    } 
} 

मैं fgets उपयोग कर रहा हूँ क्योंकि मैंने पढ़ा fgets की तुलना में बेहतर है, लेकिन यदि आवश्यक हो तो मैं इसे बदल सकते हैं।

इससे संबंधित, मैं एक uint8_t सरणी में पढ़ने वाली स्ट्रिंग को कन्वर्ट करने की कोशिश कर रहा हूं, हेक्स संख्या प्राप्त करने के लिए प्रत्येक 2 बाइट्स में शामिल हो रहा हूं।

मेरे पास यह फ़ंक्शन है जिसे मैं Arduino में बहुत उपयोग कर रहा हूं, इसलिए मुझे लगता है कि इसे बिना किसी समस्या के सामान्य सी प्रोग्राम में काम करना चाहिए।

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; 

}

लेकिन, जब भी मैं अपने कोड में है कि फ़ंक्शन को कॉल करें, मैं एक विभाजन गलती मिलता है।

पहले उत्तर के कोड के लिए इस कोड जोड़ना:

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

मैं सभी आवश्यक पैरामीटर भेजने और मैं क्या जरूरत है सरणी बाहर में पाने की कोशिश की लेकिन यह विफल रहता है ...

+0

'uint8_t * बाहर;' -> 'uint8_t * बाहर = calloc (sizeof (out_key), sizeof (* बाहर));' या 'sizeof (out_key) 'के बजाय' strlen (key_DM) + 1'। – BLUEPIXY

उत्तर

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

मैं सिर्फ उदाहरण के लिए प्रिंट कर रहा हूं। लेकिन मैं स्ट्रिंग को अन्य स्ट्रिंग में सेव करना चाहता हूं। मुझे कलाकार कैसे करना है? – Biribu

+1

@ बिरिबू इस कार्यक्रम के परिणाम 'बहिष्कार' में संग्रहीत हैं। कास्टिंग आवश्यक नहीं है। – BLUEPIXY

+0

मैंने अभी इसे देखा है। माफ़ कीजिये। मैंने पढ़ा जब मैंने printf देखा। यह बढ़िया काम करता है। बहुत बहुत धन्यवाद। – Biribu

5

की जगह इस

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

द्वारा

printf("%02X",word[i]); 
संबंधित मुद्दे