放置されてしまうかもしれませんが、質問させていただきます。
16進法の数値を表す文字列から10進法の数値へ変換する方法が知りたいです。
たとえば
FF ⇒ 255
AA
調べてみたんですが、直接使える関数がないみたいです。
自前でコツコツと作らなければいけないですか?
Windowsの電卓ではそういう変換機能がありますから、関数があるはずなのに。
たぶん無いでしょう。
数年前、私は自分で作成しました。
入力処理の勉強になりますから、自分で作られてはいかが
// ご参考
#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;
}
とりあえず、検索してみる。
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()辺りが使えそうですが。
# 使い勝手が…って場合、車輪の再発明になろうとも自作するコトはありますな。
char szHex[] = FF;
int iDec;
sscanf( szHex, %x, &iDec );
printf( %d, iDec );
επιστημη の方法
> stream >> std::hex >> result;
>>記号の意味よくわかりませんが、stream内の内容をhex形式でresultに
渡すということがわかります。
tib の方法
>sscanf( szHex, %x, &iDec );
επιστημη の方法とは、書き方が違うだけ?
とにかく、両方とも使えることを確かめました。
勉強になりました。
ありがとうございます。
επιστημη の方法
> stream >> std::hex >> result;
>>記号の意味よくわかりませんが、stream内の内容をhex形式でresultに
渡すということがわかります。
tib の方法
>sscanf( szHex, %x, &iDec );
επιστημη の方法とは、書き方が違うだけ?
とにかく、両方とも使えることを確かめました。
勉強になりました。
ありがとうございます。
> 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;
}
> Windowsの電卓ではそういう変換機能がありますから、関数があるはずなのに。
今回はたまたまありましたが、いつでもあるとは限りませんよ。
なければ作らねばなりません。
既にあるものだって、昔は無くて誰かが作ったものなんですし。
strtolで16進数文字列を変換するのってポピュラーじゃなかったんですかね。
私はこれでやってましたが、
早く見に来れば良かったな。
このstrto**シリーズは良く使います。
これだと変換エラーの処理がきちんとできるのでato*系より私は好きです。
10進数文字列の変換にもこれを使うことがしばしばです。
基数を0にすると入力内容で変換が切り替わるのも結構ミソかなと思いますよ。