- ベストアンサー
C++ 文字列変数と16進数の比較
すみません、初心者です。 char型の変数に格納されている値と16進数の値を 比較して一致したかどうか見たいのですが どのようにすればできますでしょうか? /* 16進=0x1041 (10進=4161) */ char * str = "4161"; 0x1041の16進は比較するときに直に書くとします。 このサイトで調べたら16進の値を10進に変換するような 記載もありましたが、変換してして比較すれば良いのでしょうか? やり方を記載して頂けないでしょうか。 宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Cには「文字列型」がないので初心者では仕方ない面もありますが、「文字列」を表現するときの型は「char型」ではおかしいです。 よくある勘違いですが、数値は10進表記でも16進表記でも内部での持ち方は一緒です。 ですから、比較式 0x1041 == 4161 の結果は真になります。要するに「単純にstrを数値変換して入力値と比較する」でOK。 ただし、数値変換はatoiよりはstrtolの方がベターです。書式は面倒ですが、atoiだと入力エラーがチェックできないので。 今回のケースならsprintfで入力値を16進表記文字列に変換してstrcmpで文字列比較なんて手も使えますが、まぁ普通は使いません。
その他の回答 (3)
- D-Matsu
- ベストアンサー率45% (1080/2394)
> 指定された場所(アドレス)からNULL文字が見つかるまで というのを「char型」で(配列もポインタも使わず、って意味ですよ)表現できますか?できませんよね。 #まぁ表現上の問題と言ってしまえばそれまでですが。
- anicicle
- ベストアンサー率36% (129/356)
>変換してして比較すれば良いのでしょうか? はい。但し変換するのは 「文字列」から「数値」にです。 # >「文字列」を表現するときの型は「char型」ではおかしいです。 いや、おかしくないと思う。 C言語の場合、指定された場所(アドレス)からNULL文字が見つかるまでを文字列として扱うって規定があるから。 str系の関数はその規約に基づいて作られているわけだし。
- LOHA
- ベストアンサー率52% (203/388)
普通に考えれば、 ・strが指し示す10進で書かれた文字列を数値(int型)に変換。(atoiで一発) ・変換してできた数値を0x1041と比較する。 というように実装することになると思います。