ページ 1 / 1
16進から10進へ変換
Posted: 2009年2月08日(日) 22:39
by doborn
こんばんは、はじめまして。
現在16進数から10進数へ変換するプログラムを作成しております。
現在、以下の状態なのですが、それ以降、どうすればいいのかわからず悩んでおりますので回答・アドバイスの程よろしくお願いいたします。
// 16進数の文字列から10進数のint型へ
int X(char* sin16)
{
int hennkann = 0;
hennkann = atoi(sin16);
// これ以降手詰まり...
printf("%d\n", ...);// 10進数にした答え
}
void main()
{
X(ff);// 16進数 ff
}
以上です。
よろしくお願いします。
Re:16進から10進へ変換
Posted: 2009年2月08日(日) 22:52
by 御津凪
16進数の文字列を変換するのであれば、 strtoul か strtol を使ったほうがいいと思います。
hennkann = strtoul(sin16,NULL,16);
Re:16進から10進へ変換
Posted: 2009年2月08日(日) 22:59
by box
変換したいのは下記のどちらでしょうか。
・0xffのような数値
・"ff"のような文字列
Re:16進から10進へ変換
Posted: 2009年2月08日(日) 23:05
by doborn
>御津凪さん
ご指摘ありがとうございます。
使用してみます!
>boxさん
ご指摘ありがとうございます。
後者の「"ff"のような文字列」です。
よろしくお願いします。
Re:16進から10進へ変換
Posted: 2009年2月09日(月) 05:18
by フリオ
どういうルールで変換するのでしょうか。
例えば、8ビットの16進数"ff"を10進数に変換する場合、
数学的に、"255"とするのか、2の補数表現を使って、"-1"とするのか、
または、それ以外なのか。
Re:16進から10進へ変換
Posted: 2009年2月09日(月) 10:03
by abc
%xではダメなんですか??
Re:16進から10進へ変換
Posted: 2009年2月09日(月) 11:00
by abc
ごめんなさい勘違いしてました。
0x10の場合
私なら0xまでを検索し、1を上位4ビット0を下位四ビットに格納し、数値を作ります。
よく読まないでごめんなさい。
Re:16進から10進へ変換
Posted: 2009年2月09日(月) 11:51
by toyo
char* sin16 = "0x123456789ABCDEF0";
のような巨大な数値にも対応しないといけないのかも
それなら一番下の桁からこつこつ16倍して数字文字に変換していくしかないか
Re:16進から10進へ変換
Posted: 2009年2月09日(月) 12:21
by たかぎ
> char* sin16 = "0x123456789ABCDEF0";
> のような巨大な数値にも対応しないといけないのかも
char* sin16 = "0x123456789ABCDEF0";
double x = strtod(sin16, NULL);
printf("%.0f\n", x);
のようにすれば、ある程度解決しますね。