16進法から10進法に変換 – プログラミング – Home

通知
すべてクリア

[解決済] 16進法から10進法に変換


佐倉
 佐倉
(@佐倉)
ゲスト
結合: 21年前
投稿: 43
Topic starter  

放置されてしまうかもしれませんが、質問させていただきます。
16進法の数値を表す文字列から10進法の数値へ変換する方法が知りたいです。

たとえば
FF ⇒ 255
AA

調べてみたんですが、直接使える関数がないみたいです。
自前でコツコツと作らなければいけないですか?

Windowsの電卓ではそういう変換機能がありますから、関数があるはずなのに。


引用未解決
トピックタグ
アイススケーター
 アイススケーター
(@アイススケーター)
ゲスト
結合: 23年前
投稿: 280
 

たぶん無いでしょう。
数年前、私は自分で作成しました。

入力処理の勉強になりますから、自分で作られてはいかが


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

// ご参考

#include <sstream>
#include <iostream>
#include <string>

int hex2int(const std::string& str) {
std::istringstream stream(0x+str);
int result;
stream >> std::hex >> result;
return result;
}

int main(int argc, char* argv[]) {
for ( int i = 1; i < argc; ++i ) {
std::cout << argv[i] << '=' << hex2int(argv[i]) << std::endl;
}
return 0;
}


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 22年前
投稿: 160
 

とりあえず、検索してみる。

http://www.google.co.jp/search?hl=ja&ie=UTF-8&c2coff=1&q=16%E9%80%B2+%E6%96%87%
E5%AD%97%E5%88%97+%E6%95%B0%E5%80%A4+%E5%A4%89%E6%8F%9B&lr=lang_ja

strtol()辺りが使えそうですが。

# 使い勝手が…って場合、車輪の再発明になろうとも自作するコトはありますな。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

char szHex[] = FF;
int iDec;
sscanf( szHex, %x, &iDec );
printf( %d, iDec );


返信引用
佐倉
 佐倉
(@佐倉)
ゲスト
結合: 21年前
投稿: 43
Topic starter  

επιστημη の方法
> stream >> std::hex >> result;
>>記号の意味よくわかりませんが、stream内の内容をhex形式でresultに
渡すということがわかります。

tib の方法
>sscanf( szHex, %x, &iDec );
επιστημη の方法とは、書き方が違うだけ?

とにかく、両方とも使えることを確かめました。
勉強になりました。
ありがとうございます。


返信引用
佐倉
 佐倉
(@佐倉)
ゲスト
結合: 21年前
投稿: 43
Topic starter  

επιστημη の方法
> stream >> std::hex >> result;
>>記号の意味よくわかりませんが、stream内の内容をhex形式でresultに
渡すということがわかります。

tib の方法
>sscanf( szHex, %x, &iDec );
επιστημη の方法とは、書き方が違うだけ?

とにかく、両方とも使えることを確かめました。
勉強になりました。
ありがとうございます。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

> strtol()辺りが使えそうですが。

使えました。

#include <iostream>
#include <string>
#include <cstdlib>

int hex2int(const std::string& str) {
char* endp;
return std::strtol((0x+str).c_str(),&endp,16);
}

int main(int argc, char* argv[]) {
for ( int i = 1; i < argc; ++i ) {
std::cout << argv[i] << '=' << hex2int(argv[i]) << std::endl;
}
return 0;
}


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
 

> Windowsの電卓ではそういう変換機能がありますから、関数があるはずなのに。

今回はたまたまありましたが、いつでもあるとは限りませんよ。
なければ作らねばなりません。
既にあるものだって、昔は無くて誰かが作ったものなんですし。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

strtolで16進数文字列を変換するのってポピュラーじゃなかったんですかね。
私はこれでやってましたが、
早く見に来れば良かったな。
このstrto**シリーズは良く使います。
これだと変換エラーの処理がきちんとできるのでato*系より私は好きです。
10進数文字列の変換にもこれを使うことがしばしばです。
基数を0にすると入力内容で変換が切り替わるのも結構ミソかなと思いますよ。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました