10進数を16進数にするには?


菊次郎  2006-06-07 16:56:13  No: 62061  IP: 192.*.*.*

初めまして、初めて質問させていただきます。よろしくお願いします。
int型の変数に格納してある10進数を16進数に変換して別のint型の変数に格納し、表示させたいのですが、どのようにすれば良いのでしょうか?どうぞ教えてください。言語はc++です。

編集 削除
Blue  2006-06-07 17:00:06  No: 62062  IP: 192.*.*.*

結局 int型 の変数に入れてしまえば、16進表記だろうが、10進表記だろうが
区別はなくなります。

文字列として表記するときには printf(sprintf)関数で表示できます。

int n, m;
n = 10;
m = n;
printf( "n = %d\n", n );
printf( "m = %02X\n", m );

編集 削除
菊次郎  2006-06-07 17:26:22  No: 62063  IP: 192.*.*.*

すません!間違えました。char型の変数にint型の変数に格納してある10進数を16進数に変換して格納でした。お手数をかけて申し訳ありませんが、もう一度教えてください。よろしくお願いします。

編集 削除
Blue  2006-06-07 17:44:02  No: 62064  IP: 192.*.*.*

char型の変数ですか?char型文字列変数ではなくて?

char型の場合int型からの代入になるので当然情報落ちします。

int n;
char c
n = 10;
c = ( char )n;
printf( "n = %d\n", n );
printf( "c = %02X\n", c );


一応文字列のヤツも載せておきます。
sprintfを使います。

int n;
char s[ 16 ];
n = 10;
sprintf( s, "%02X", n );

printf( "n = %d\n", n );
printf( "s = %s\n", s );


ついでに逆も載せておきます。strtolを使います。

char s[] = "0A";
int n;
n = ( int )strtol( s, NULL, 16 );

printf( "n = %d\n", n );
printf( "s = %s\n", s );

編集 削除
KING・王  2006-06-07 17:48:56  No: 62065  IP: 192.*.*.*

> char型の変数にint型の変数に格納してある10進数を16進数に変換して格納でした。

char型の配列に、文字列として出力と勝手に解釈しています。
#単純にchar型の場合、データによってはオーバーフロー等が起こり、
#データが切り捨て等が必要になるので、勝手に意訳。

Blueさんの提示されているのを応用して、出力先を画面からchar型の配列にするだけです。

int n = 10;
char buf[8] = {0x00};
sprintf( buf, "%02X", m );

printf( "%s\n", buf );

#未テストです。

編集 削除
KING・王  2006-06-07 17:52:11  No: 62066  IP: 192.*.*.*

> sprintf( buf, "%02X", m );
sprintf( buf, "%02X", n );

#Blueさんとかぶった上にtypoまで。。。orz

編集 削除
菊次郎  2006-06-07 18:19:09  No: 62067  IP: 192.*.*.*

ありがとうございます、お二方。できました!無知な自分のためにご親切に説明していただきありがとうございました。

編集 削除