dポイントプレゼントキャンペーン実施中!

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

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

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

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

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

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

宜しくお願いします。

A 回答 (4件)

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



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

0x1041 == 4161

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

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

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



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

>変換してして比較すれば良いのでしょうか?


はい。但し変換するのは
「文字列」から「数値」にです。

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

普通に考えれば、


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています