• ベストアンサー

C++ 文字列変数と16進数の比較

すみません、初心者です。 char型の変数に格納されている値と16進数の値を 比較して一致したかどうか見たいのですが どのようにすればできますでしょうか? /* 16進=0x1041 (10進=4161) */ char * str = "4161"; 0x1041の16進は比較するときに直に書くとします。 このサイトで調べたら16進の値を10進に変換するような 記載もありましたが、変換してして比較すれば良いのでしょうか? やり方を記載して頂けないでしょうか。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

Cには「文字列型」がないので初心者では仕方ない面もありますが、「文字列」を表現するときの型は「char型」ではおかしいです。 よくある勘違いですが、数値は10進表記でも16進表記でも内部での持ち方は一緒です。 ですから、比較式 0x1041 == 4161 の結果は真になります。要するに「単純にstrを数値変換して入力値と比較する」でOK。 ただし、数値変換はatoiよりはstrtolの方がベターです。書式は面倒ですが、atoiだと入力エラーがチェックできないので。 今回のケースならsprintfで入力値を16進表記文字列に変換してstrcmpで文字列比較なんて手も使えますが、まぁ普通は使いません。

その他の回答 (3)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

> 指定された場所(アドレス)からNULL文字が見つかるまで というのを「char型」で(配列もポインタも使わず、って意味ですよ)表現できますか?できませんよね。 #まぁ表現上の問題と言ってしまえばそれまでですが。

  • anicicle
  • ベストアンサー率36% (129/356)
回答No.3

>変換してして比較すれば良いのでしょうか? はい。但し変換するのは 「文字列」から「数値」にです。 # >「文字列」を表現するときの型は「char型」ではおかしいです。 いや、おかしくないと思う。 C言語の場合、指定された場所(アドレス)からNULL文字が見つかるまでを文字列として扱うって規定があるから。 str系の関数はその規約に基づいて作られているわけだし。

  • LOHA
  • ベストアンサー率52% (203/388)
回答No.1

普通に考えれば、 ・strが指し示す10進で書かれた文字列を数値(int型)に変換。(atoiで一発) ・変換してできた数値を0x1041と比較する。 というように実装することになると思います。