アプリ版:「スタンプのみでお礼する」機能のリリースについて

16進をASCIIコードに変換する手法を教えて下さい。
*例
もしchar型変数aに0x0aが入っていたら0x41(大文字にしたい)
aの値が1~fどれがきても対応できるようにしたいのですが・・・
if文とかswitchを多用しなくても簡潔に記述できますか?

A 回答 (4件)

1文字の16進文字に変換するのが不思議ですが・・



とりあえずif文を使わないやりかたなら
char ans, table[] = "0123456789ABCDEF";
:
ans = table[a];
が簡単かと。
って、書いてたら、No.3さんに越された。

しかたないので、ちょっとずるいやりかたを紹介。
ans = "0123456789ABCDEF"[a];
    • good
    • 4

シンプルな方法があります。



簡単のため、aが16進一桁の場合で回答します。

char hd[] = "0123456789ABCDEF" ;

という文字列配列を用意しておけば、hd[a] はまさに求める文字です。

2桁以上になる場合はループで4ビットずつシフトしながら下位4ビットに対して同じことをするだけです。
    • good
    • 3

間違えた(^^;;;



_itoa

http://www.microsoft.com/japan/msdn/library/defa …

で、文字列に変換し、必要であれば、toupperで大文字に。


0x0~0xfまでの範囲で、ロジックを組むのであれば、

if(a >= 0x0 && a <= 0x9) {
a += '0';
}
else if(a >= 0xa && a<= 0xf) {
a = 'A' + ( a - 10);
}

かな?

この回答への補足

回答有難う御座います。
教えて頂いたアドレスのホームページ上に下記のようなプログラムと出力結果がでていましたがbase9以降の結果がなぜそうなるのかが?です。すいませんが教えて下さい。

for( r=10; r>=2; --r )
{
_itoa( -1, buffer, r );
printf( "base %d: %s (%d chars)\n", r, buffer, strlen(buffer) );
}
printf( "\n" );
出力
base 10: -1 (2 chars)
base 9: 12068657453 (11 chars)
base 8: 37777777777 (11 chars)
base 7: 211301422353 (12 chars)
base 6: 1550104015503 (13 chars)
base 5: 32244002423140 (14 chars)
base 4: 3333333333333333 (16 chars)
base 3: 102002022201221111210 (21 chars)
base 2: 11111111111111111111111111111111 (32 chars)

補足日時:2003/10/15 09:06
    • good
    • 0
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A