- 締切済み
16進をASCIIコードに変換する手法
16進をASCIIコードに変換する手法を教えて下さい。 *例 もしchar型変数aに0x0aが入っていたら0x41(大文字にしたい) aの値が1~fどれがきても対応できるようにしたいのですが・・・ if文とかswitchを多用しなくても簡潔に記述できますか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- bikkuri
- ベストアンサー率33% (23/68)
1文字の16進文字に変換するのが不思議ですが・・ とりあえずif文を使わないやりかたなら char ans, table[] = "0123456789ABCDEF"; : ans = table[a]; が簡単かと。 って、書いてたら、No.3さんに越された。 しかたないので、ちょっとずるいやりかたを紹介。 ans = "0123456789ABCDEF"[a];
- shige_70
- ベストアンサー率17% (168/946)
シンプルな方法があります。 簡単のため、aが16進一桁の場合で回答します。 char hd[] = "0123456789ABCDEF" ; という文字列配列を用意しておけば、hd[a] はまさに求める文字です。 2桁以上になる場合はループで4ビットずつシフトしながら下位4ビットに対して同じことをするだけです。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
間違えた(^^;;; _itoa http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt__itoa.2c_._i64toa.2c_._ui64toa.2c_._itow.2c_._i64tow.2c_._ui64tow.asp で、文字列に変換し、必要であれば、toupperで大文字に。 0x0~0xfまでの範囲で、ロジックを組むのであれば、 if(a >= 0x0 && a <= 0x9) { a += '0'; } else if(a >= 0xa && a<= 0xf) { a = 'A' + ( a - 10); } かな?
- taka_tetsu
- ベストアンサー率65% (1020/1553)
補足
回答有難う御座います。 教えて頂いたアドレスのホームページ上に下記のようなプログラムと出力結果がでていましたが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)