ページ 11

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);
のようにすれば、ある程度解決しますね。