2014-09-02 9 views
6

हैलो मैं digi गतिशील सी का उपयोग कर रहा हूँ।सी में स्ट्रिंग करने के लिए हेक्स कनवर्ट करना?

printf("This is element 0: %x\n", readingreg[0]); 

लेकिन मैं स्ट्रिंग में यह चाहते हैं तो मैं printf बयान इस तरह उपयोग कर सकते हैं: मैं स्ट्रिंग के लिए इस कन्वर्ट करने के लिए कोशिश कर रहा हूँ

char readingreg[4]; 
readingreg[0] = 4a; 
readingreg[1] = aa; 
readingreg[2] = aa; 
readingreg[3] = a0; 

वर्तमान में जब मैं printf बयान कर इसे इस तरह हो गया है

printf("This is element 0: %s\n", readingreg[0]); 

मैं अनिवार्य रूप से टीसीपी/आईपी पोर्ट पर रीडिंग्रेग सरणी भेज रहा हूं, जिसके लिए मुझे इसे स्ट्रिंग के रूप में रखना होगा। मैं इसे स्ट्रिंग में बदलने में सक्षम नहीं प्रतीत होता। आपकी सहायता के लिए धन्यवाद. अगर कोई मुझे बता सकता है कि पूरे सरणी के बजाय एक समय में प्रत्येक तत्व को कैसे करना है, तो यह ठीक होगा क्योंकि केवल 4 तत्व होंगे।

+0

कृपया यह स्पष्ट है, तो आप के लिए वास्तव में क्या

मैं निम्नलिखित आउटपुट प्राप्त प्रिंट करने के लिए दूसरा printf() चाहते हैं। –

+0

[inet_ntoa()] (http://linux.die.net/man/3/inet_ntoa) एक बफर को मुद्रित करने के लिए –

+0

उपयोग 'snprintf', तो वह प्रिंट? 0 बाइट को समाप्त करने वाली स्ट्रिंग भी याद रखें। – hyde

उत्तर

6

0xaa अतिप्रवाह जब सादे char हस्ताक्षरित किया गया है, का उपयोग unsigned char:

#include <stdio.h> 

int main(void) 
{ 
    unsigned char readingreg[4]; 
    readingreg[0] = 0x4a; 
    readingreg[1] = 0xaa; 
    readingreg[2] = 0xaa; 
    readingreg[3] = 0xa0; 
    char temp[4]; 

    sprintf(temp, "%x", readingreg[0]); 
    printf("This is element 0: %s\n", temp); 
    return 0; 
} 
+0

यह काम किया। धन्यवाद! –

+0

आपका स्वागत है –

2

अपने मशीन बड़ा endian है, तो आप क्या कर सकते हैं निम्नलिखित:

char str[9]; 
uint32_t host; 

host = htonl(*(uint32_t *)readingreg); 
sprintf(str, "%x", host); 

तो पोर्टेबिलिटी है: अपने मशीन थोड़ा endian है

char str[9]; 

sprintf(str, "%x", *(uint32_t *)readingreg); 

यदि आप बाइट क्रम स्वैप करना होगा एक चिंता, आपको अपनी अंतहीनता के बावजूद विधि दो का उपयोग करना चाहिए।

printf("0x%s\n", str); 

0x4aaaaaa0

संबंधित मुद्दे