16進から10進へ変換

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
doborn

16進から10進へ変換

#1

投稿記事 by doborn » 16年前

こんばんは、はじめまして。

現在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進へ変換

#2

投稿記事 by 御津凪 » 16年前

16進数の文字列を変換するのであれば、 strtoul か strtol を使ったほうがいいと思います。
hennkann = strtoul(sin16,NULL,16);

box

Re:16進から10進へ変換

#3

投稿記事 by box » 16年前

変換したいのは下記のどちらでしょうか。
 ・0xffのような数値
 ・"ff"のような文字列

doborn

Re:16進から10進へ変換

#4

投稿記事 by doborn » 16年前

>御津凪さん
ご指摘ありがとうございます。
使用してみます!

>boxさん
ご指摘ありがとうございます。
後者の「"ff"のような文字列」です。


よろしくお願いします。

フリオ

Re:16進から10進へ変換

#5

投稿記事 by フリオ » 16年前

 
 どういうルールで変換するのでしょうか。

例えば、8ビットの16進数"ff"を10進数に変換する場合、
数学的に、"255"とするのか、2の補数表現を使って、"-1"とするのか、
または、それ以外なのか。
 

abc

Re:16進から10進へ変換

#6

投稿記事 by abc » 16年前

%xではダメなんですか??

abc

Re:16進から10進へ変換

#7

投稿記事 by abc » 16年前

ごめんなさい勘違いしてました。
0x10の場合
私なら0xまでを検索し、1を上位4ビット0を下位四ビットに格納し、数値を作ります。
よく読まないでごめんなさい。

toyo

Re:16進から10進へ変換

#8

投稿記事 by toyo » 16年前

char* sin16 = "0x123456789ABCDEF0";
のような巨大な数値にも対応しないといけないのかも
それなら一番下の桁からこつこつ16倍して数字文字に変換していくしかないか

たかぎ

Re:16進から10進へ変換

#9

投稿記事 by たかぎ » 16年前

> char* sin16 = "0x123456789ABCDEF0";
> のような巨大な数値にも対応しないといけないのかも
char* sin16 = "0x123456789ABCDEF0";
double x = strtod(sin16, NULL);
printf("%.0f\n", x);
のようにすれば、ある程度解決しますね。

閉鎖

“C言語何でも質問掲示板” へ戻る