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

すみません、初心者です。

char型の変数に格納されている値と16進数の値を
比較して一致したかどうか見たいのですが
どのようにすればできますでしょうか?

/* 16進=0x1041 (10進=4161) */
char * str = "4161";

0x1041の16進は比較するときに直に書くとします。

このサイトで調べたら16進の値を10進に変換するような
記載もありましたが、変換してして比較すれば良いのでしょうか?

やり方を記載して頂けないでしょうか。

宜しくお願いします。

投稿日時 - 2011-01-21 01:38:22

QNo.6463212

すぐに回答ほしいです

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

Cには「文字列型」がないので初心者では仕方ない面もありますが、「文字列」を表現するときの型は「char型」ではおかしいです。

よくある勘違いですが、数値は10進表記でも16進表記でも内部での持ち方は一緒です。
ですから、比較式

0x1041 == 4161

の結果は真になります。要するに「単純にstrを数値変換して入力値と比較する」でOK。
ただし、数値変換はatoiよりはstrtolの方がベターです。書式は面倒ですが、atoiだと入力エラーがチェックできないので。

今回のケースならsprintfで入力値を16進表記文字列に変換してstrcmpで文字列比較なんて手も使えますが、まぁ普通は使いません。

投稿日時 - 2011-01-21 07:43:40

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(3件中 1~3件目)

ANo.4

> 指定された場所(アドレス)からNULL文字が見つかるまで

というのを「char型」で(配列もポインタも使わず、って意味ですよ)表現できますか?できませんよね。
#まぁ表現上の問題と言ってしまえばそれまでですが。

投稿日時 - 2011-01-21 09:29:14

ANo.3

>変換してして比較すれば良いのでしょうか?
はい。但し変換するのは
「文字列」から「数値」にです。

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

投稿日時 - 2011-01-21 08:39:18

ANo.1

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

投稿日時 - 2011-01-21 02:20:10

あなたにおすすめの質問

[PR] お役立ち情報