Entry

プログラミング・メモ - 16進数表現の文字を数値にする

2007年10月18日

お決まりの方法でもいいけれど,こんな風にしてみるのはどうだろう……。

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

#define HEXNUM(ch) ((ch >> 6) | (ch >> 6) << 3) + (ch & 0x0F)

int
main(int argc, char *argv[])
{
    char ch[] = "0123456789ABCDEF0123456789abcdef";
    int num = -1;
    int i;

    for (i = 0; i < strlen(ch); i++) {
        num = HEXNUM(ch[i]);
        printf("%d ", num);
    }
    putchar('\n');

    return 0;
}

「お決まりの」というのは,「if (ch <= '9') num = ch - '0'; ……」のように if 文で分ける方法なんですけれど,計算量はそれほど変わらないかもしれせん。シンプルに書くなら,マクロにしやすい上の方法がよさげ。もっと簡単にできるのかなあ……。16進数の文字はアルファベットの大文字・小文字も判断できるけれど,それ以外の文字は考慮に入れていません。

数字から文字への変換は簡単だけれど,文字から数字への変換をできる限り簡単に書くのは難しいんですよねー。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN