ASCII string
Cでフォーマットに変換したい、TBCD(Telephony Binary-Coded Decimal)
またはその逆をしたい。多くのサイトを検索しましたが、答えが見つかりませんでした。
質問する
5493 次
2 に答える
6
最も簡単な方法は、おそらく 1 対の配列を使用して、各 ASCII 文字を対応する TBCD 文字にマップすることです。およびその逆。
ウィキペディアで読んだことから、次を使用する必要があります。
const char *tbcd_to_ascii = "0123456789*#abc";
const char ascii_to_tbcd[] = {
15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* filler when there is an odd number of digits */
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[] = { 0x10, 0x32, 0x54, 0x76, 0x98, 0xba, 0xdc, 0xfe };
/* The converted ASCII string will be stored here. Make sure to have
enough room for the result and a terminating 0 */
char ascii[16] = { 0 };
/* Convert the TBCD to ASCII */
int i;
for (i = 0; i < sizeof(tbcd)/sizeof(*tbcd); i++) {
ascii[2 * i] = tbcd_to_ascii[tbcd[i] & 0x0f];
ascii[2 * i + 1] = tbcd_to_ascii[(tbcd[i] & 0xf0) >> 4];
}
ASCII から TBCD に変換するには:
/* ASCII number */
const char *ascii = "0123456789*#abc";
/* The converted TBCD number will be stored here. Make sure to have enough room for the result */
int tbcd[8];
int i;
int len = strlen(ascii);
for (i = 0; i < len; i += 2)
tbcd[i / 2] = ascii_to_tbcd[ascii[i]]
| (ascii_to_tbcd[ascii[i + 1]] << 4);
編集: @Kevin は、TBCD が1 バイトあたり2桁をパックすることを指摘しました。
于 2013-01-03T06:53:42.987 に答える
3
#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;
}
于 2013-01-03T07:27:50.253 に答える