2013-01-03 11 views

उत्तर

5

संभवतः प्रत्येक एएससीआईआई चरित्र को अपने टीबीसीडी समकक्ष को मैप करने के लिए सरणी की एक जोड़ी का उपयोग करना सबसे आसान है। और इसके विपरीत।

what I read on Wikipedia से आप का उपयोग करना चाहिए निम्नलिखित:

const char *tbcd_to_ascii = "*#abc"; 
const char ascii_to_tbcd[] = { 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0,11, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, /* # * */ 
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0 /* digits */ 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0,12,13,14   /* a b c */ 
}; 

आप एक TBCD है, ASCII करने के लिए आप क्या करेंगे यह कन्वर्ट करने के लिए:

/* The TBCD to convert */ 
int tbcd[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 }; 
/* The converted ASCII string will be stored here. Make sure to have enough room for the result */ 
char ascii[16]; 
/* Convert the TBCD to ASCII */ 
int i; 
for (i = 0; i < sizeof(tbcd)/sizeof(*tbcd); i++) 
    ascii[i] = tbcd_to_ascii[tbcd[i]]; 
/* For safety, null terminate the ASCII string */ 
ascii[i] = 0; 

TBCD को ASCII से परिवर्तित करने के लिए बहुत समान है :

for (i = 0; ascii[i]; i++) 
    tbcd[i] = ascii_to_tbcd[ascii[i]]; 
+0

टी बीसीडी के लिए सी कार्यान्वयन यहां दिया गया है: http://en.wikipedia.org/wiki/Double_dabble –

+0

@kmkaplan मान लीजिए कि मेरे पास एएससीआईआई में परिवर्तित होने के लिए टीबीसीडी प्रारूप में आईएमएसआई है। Arrays कैसे ऊपर मदद करेगा? –

+0

@ डीजे मुझे वास्तव में पता नहीं है कि आईएमएसआई क्या है, लेकिन मैंने एक उदाहरण देने के लिए अपना जवाब संपादित किया कि आप एक टीबीसीडी सरणी को ASCII स्ट्रिंग में कैसे परिवर्तित करेंगे। – kmkaplan

2
#include <ctype.h> 
int cnv_tbcd(char *str, char *tbcd) { 
    int c = 0; 
    int err = 0; 
    for (c=0; str[c]; c++) { 
    if (isdigit(str[c])) { 
     tbcd[c] = str[c] & 0x0f; 
    } else { 
     switch(str[c]) { 
     case '*': tbcd[c] = 0x0a; break; 
     case '#': tbcd[c] = 0x0b; break; 
     case 'a': tbcd[c] = 0x0c; break; 
     case 'b': tbcd[c] = 0x0d; break; 
     case 'c': tbcd[c] = 0x0e; break; 
     default: tbcd[c] = 0xff; err++; 
     } 
    } 
    } 
    if (c % 2 == 0) { 
    tbcd[c] = 0x0f; 
    tbcd[c+1] = 0; 
    } 
    return err; 
} 
+0

हाँ, उत्तर अपडेट किया गया – perreal

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