2011-03-23 16 views
10

मेरे पास एक हेक्स स्ट्रिंग है और इसे सी में एसीआई स्ट्रिंग में परिवर्तित करना चाहते हैं। मैं इसे कैसे पूरा कर सकता हूं ??हेक्स से एसीआई स्ट्रिंग रूपांतरण

+1

एक हेक्स स्ट्रिंग नहीं है? या ईबीसीडीआईसी का उपयोग कर रहे हैं? :) – pmg

उत्तर

13

आप एक ही समय में 2 (हेक्स) वर्ण ले ... तो पूर्णांक मूल्य गणना और उसके बाद की तरह चार रूपांतरण बनाने की जरूरत है ...

char d = (char)intValue;

हर के लिए ऐसा करते हैं alphabe तरह

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

int hex_to_int(char c){ 
     int first = c/16 - 3; 
     int second = c % 16; 
     int result = first*10 + second; 
     if(result > 9) result--; 
     return result; 
} 

int hex_to_ascii(char c, char d){ 
     int high = hex_to_int(c) * 16; 
     int low = hex_to_int(d); 
     return high+low; 
} 

int main(){ 
     const char* st = "48656C6C6F3B"; 
     int length = strlen(st); 
     int i; 
     char buf = 0; 
     for(i = 0; i < length; i++){ 
       if(i % 2 != 0){ 
         printf("%c", hex_to_ascii(buf, st[i])); 
       }else{ 
         buf = st[i]; 
       } 
     } 
} 
2

कुछ वर्ण: हेक्स स्ट्रिंग

इस काम करता है, तो स्ट्रिंग वर्ण केवल 0-9A-एफ हैं 2chars ts i-o को संबंधित ASCII वर्णों में परिवर्तित नहीं किया जा सका। स्ट्रिंग '6631653064316f30723161' की तरह फेडोरा से मेल खाता है। लेकिन यह fedra

बस हेक्स_to_int() को थोड़ा सा संशोधित करता है और यह सभी पात्रों के लिए काम करेगा। संशोधित समारोह

int hex_to_int(char c) 
{ 
    if (c >= 97) 
     c = c - 32; 
    int first = c/16 - 3; 
    int second = c % 16; 
    int result = first * 10 + second; 
    if (result > 9) result--; 
    return result; 
} 

अब यह सभी वर्णों के लिए काम करेंगे की कोशिश है।

0

strtol() यहां आपका मित्र है। तीसरा पैरामीटर संख्यात्मक आधार है जिसे आप परिवर्तित कर रहे हैं।

उदाहरण: (: `" F00BA4 "` जैसे) ascii स्ट्रिंग का एक विशेष मामला

#include <stdio.h>  /* printf */ 
#include <stdlib.h>  /* strtol */ 

int main(int argc, char **argv) 
{ 
    long int num = 0; 
    long int num2 =0; 
    char * str. = "f00d"; 
    char * str2 = "0xf00d"; 

    num = strtol(str, 0, 16); //converts hexadecimal string to long. 
    num2 = strtol(str2, 0, 0); //conversion depends on the string passed in, 0x... Is hex, 0... Is octal and everything else is decimal. 

    printf("%ld\n", num); 
    printf("%ld\n", num); 
} 
+0

इसलिए कोई 'itoa' ... – Yvain

+0

@Yvain no। शुरुआत के लिए, 'itoa()' के साथ रूपांतरण गलत तरीका है। 'atoi()' केवल दशमलव इनपुट स्वीकार करता है। 'atof' हेक्साडेसिमल स्वीकार करता है (उपरोक्त दूसरे उदाहरण में' 0x "के साथ शुरू करने की आवश्यकता है, और केवल सी 99 या बाद में काम करता है (यदि यह मायने रखता है) – Baldrickk

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