• ベストアンサー

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と比較する。 というように実装することになると思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • int型変数をchar型変数に格納する方法

    int型数値をchar型変数に格納したいのですが、 sprintf()とatoi()を用いてやりましたが、 うまくいきません。 考えたコードを下記します。 int get_y(){ int y=2005; return y; } int main(){ char year; char str[5]; //intをcharに変換して格納している sprintf(str,"%d",get_y()); //数値として代入 year=atoi(str); //yearには2005が格納されていない! cout<<year<<endl; char ans; //このchar型変数に数値を代入する。 ans=year; cout<<ans<<endl; return 0; } お手数をお掛けしますが、 よろしくお願い致します。

  • C言語:小文字を大文字に変換する関数を作成

    C言語超初心者です。学校の課題で次のような問題が出されました。 ・問題・ 次に挙げる縛りに沿い、以下の関数とメイン関数を作り、処理結果を画面に作成しなさい。 char *tst(char *str) ・strの中の文字列も小文字を大文字に変換し、変換した文字列が格納されているchar *に返す。 ・引数strの中の文字列は受け取った状態で手を加えない。 ・関数内でmalloc関数を使用し、領域を確保して大文字に変換した文字列を格納しreturnでポインタを返す。 ・malloc関数を使用する。 ---------------------------------------------------------------------------------- 大文字に変換するには while(*str != '\0') { if(*str >= 'a' && *str <= 'z') { *str -= 'a'- 'A'; } ++str; } というのは分かったのですがここから何をすするか全く分かりません。初心者なのでなるべく分かりやすく教えてもらえると有難いです。 お願いします。

  • 変数操作(C言語)

    C言語でプログラムを書いてます。 char1[0]:1 char1[1]:5   ↓ char2[0]:1 char2[1]:NULL char2[2]:NULL char2[3]:NULL char2[4]:5 char2[5]:NULL という風に値の順番と配列の順番を別の変数で一緒にしたいのです。1から5までの値はNULL、また5以降はNULLといったように値を格納したいのです。 こういったロジックの組み方のご教授願います。 また値が2、4でも対応できるような(どんな数でも)ものでお願いします。(↓例) char1[0]:2 char1[1]:4   ↓ char2[0]:NULL char2[1]:2 char2[2]:NULL char2[3]:4 char2[4]:NULL char2[5]:NULL よろしくお願い致します。

  • 文字列って何なの?

    ど素人です。ポインタと文字列で躓いています。 まず、以下のようなプログラムをテスト的な意味で作りました。 ****************************************************** #include<stdio.h> int main(void){ char *str = "harehareyukai"; if (str == "harehareyukai"){ printf("haruhi"); }else{ printf("nagato"); } } ****************************************************** これを実行すると haruhi という結果になります。 そこで質問なのですが、*strはポインタ変数として宣言してます。 したがってstrの値は0x10101010みたいな(適当ですが)アドレスが入っているはずです。 なのに何故str == "harehareyukai"が真になるのでしょうか? (自分は最初 *str == "harehareyukai"が真になると思っていましたが違っていました。) というか"harehareyukai"という「文字列」は評価されるとどういう存在になるのでしょうか。 よろしくお願いいたします。

  • 【C++/CLI】コンボボックスの値と文字列比較、一致した場合インデックスを返す

    VC++2005の.NET、言語はC++/CLIにてアプリを作成しています。 コンボボックスの中に、下記値が入っているとします。 【コンボボックス】 aaa bbb ccc これらの値に対し、String型の変数に格納された文字列「bbb」で、 コンボボックスの中に入った値と比較していき、値が等しければ、 コンボボックスのインデックス(この場合は「1」)を返すという プログラムを作成したいのですが、そのような処理を実現させるような、 コンボボックスのメンバ関数、APIなどについてご存知の方おられましたら、 ご教示お願い致します。 下記に雛形を記載します。 String str; str = "bbb"; //ここにコンボボックスの中の値と順番に比較する処理 if ( 比較結果が等しい ) { //該当する値のインデックスを返す }

  • Cの文字列比較で・・

    "abcdefghi"と"cde"を比較して3つの単語が一致すれば値を返すstrcmp,strncmpのような文字列比較関数は存在しないでしょうか? よろしくお願いします。

  • PHPの文字列をJavascriptの変数にする

    PHPの変数に格納された文字列を、直接Javascriptの変数の一部として格納しようと考えています。 例:) <script> var txt = "<?php echo $text; ?>"; </script> しかし、$textにダブルクォーテーションなどの文字が含まれていると、スクリプト全体が破綻します。今のところ、PHPの中で、問題を起こしそうな文字列を変換するように処理しています。 例:) $text = str_replace("\\", "\\\\", $text); $text = str_replace("\"", "\\\"", $text); $text = str_replace("\n", "\\n", $text); これよりもスマートな方法(たとえば用意されている関数を使うなど)がありますでしょうか。

    • ベストアンサー
    • PHP
  • C言語で文字列をかえす正しい書き方が知りたいです?

    C言語で次の警告が表示されます。 文字列を返したいのですが、正しい書き方はどのようにすれば良いのでしょうか? jci.h(20) : warning C4172; ローカル変数またはテンポラリのアドレスを返します。 char *test(char *a, int b) { char str[BUFSIZ]; return str; <------ }

  • 0を含んだ文字列の長さ(バイト数)の求め方

    環境:VC2005 WinAPI32 C言語 SDK 上記の環境でプログラミングをしています。 よろしくお願いいたします。 char str[256]=""; strcat(str, "ABC"); str[4]=0; strcat(str, "DEF"); たとえば上記のようなプログラムで、 str中のバイト数(文字列長?)を求めたいと思っています。 strの中身は [A][B][C][0][D][E][F][0][0][0]...[0]となっていますが、 このとき、7という値を取得したいのですが、何か効率的な方法はありますでしょうか・・。

  • 文字列strの中から文字cを探すプログラム(C言語)がわからない

    文字列strの中から文字cを探すプログラム(C言語)がわからない 柴田望洋さんの「[新版]明解C言語」という本の演習11-2なんですがどうしてもわかりません。間違いは無いと思うのにコンパイルすると警告を吐かれます。 僕が書いたプログラムを載せます。 /* 文字列strの中に、文字cが含まれていれば(複数ある場合は、最も先頭側とする)、 その文字へのポインタを返し、含まれていなければNULLを返す関数 char *str_chr(const char *str, int c) {} を作成せよ。 */ #include<stdio.h> char *str_chr(const char *str, int c){ while(*str){ if(*str==c) return str; str++; }     return NULL; } int main(){ char *str; char c; scanf("%s",str); scanf(" %c",c);     printf("%d",str_chr(str,c)); return 0; } コンパイラは「関数str_chrのif分の中のreturn strの型変換に問題がある」と言っているんです。 型変換はしるつもりは無いのにコンパイラはなぜそのように認識するのでしょうか。 またネット答えを探しましたがどうやらこのreturn strの部分はreturn (char*)strが正解のようです。意味がわかりません。strはポインタなのになぜまたわざわざchar型に変換しているのですか?といか(char*)の意味が根本的にわかりません。 質問ばかりですみません。初心者でポインタがどうにも理解できないんです。 誰か詳しい人教えてください。 お願いします。