none
文字を表す文字コードの表示について RRS feed

  • 質問

  • C++を勉強中ですが下記のコマンドに表示される整数がどうしてそのような整数になるのかがわかりません。

    #include <iostream>

    int main()
    {
    std::cout << (int)"IDOL"[0] << "\n";
    std::cout << (int)"IDOL"[1] << "\n";
    std::cout << (int)"IDOL"[2] << "\n";
    std::cout << (int)"IDOL"[3] << "\n";
    std::cout << (int)"IDOL"[4] << "\n";
    return 0;
    }

    表示

    73
    68
    79
    76
    0
    続行するには何かキーを押してください . . .

    なぜこの整数になるのかを知りたいです。お教えください

    2015年10月17日 5:00

回答

  • 文字列はchar型の配列と同じなので、そこからn番目のchar型の値を取り出して、そのchar型をint型にキャストして、そのint型を文字列化して出力しているからです。
    文字と値の対応はアスキーコード表などで検索するといいです。

    //Iはアスキーコードでは十進数で73 //Dはアスキーコードでは十進数で68 //Oはアスキーコードでは十進数で79 //Lはアスキーコードでは十進数で76 char buf[] = "IDOL";//この文字列はchar型の配列と同じ。ただし文字列の終端として\0が付く //char buf[] = { 'I', 'D', 'O', 'L','\x0' }; や //char buf[] = { 73, 68, 79, 76, 0 }; と同じこと char c = buf[0];//char型の配列の最初の文字を取り出す //キャストよりも配列添え字[]の方が優先度が高いので先に処理 int i = (int)c;//char型を符号ありintに拡張。(char型はVC++では符号付8bit) std::cout << i << "\n";//int型の値をコンソールに文字列化して出力 i = (int)buf[1]; std::cout << i << "\n"; i = (int)buf[2]; std::cout << i << "\n"; i = (int)buf[3]; std::cout << i << "\n"; i = (int)buf[4];//文字列の最後には終端文字(\x0)があるので(int)0になる std::cout << i << "\n";//終端文字の0



    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク moriuchi 2015年10月17日 7:53
    • 編集済み gekkaMVP 2015年10月17日 8:05 書き間違い修正
    2015年10月17日 6:58

すべての返信

  • 文字列はchar型の配列と同じなので、そこからn番目のchar型の値を取り出して、そのchar型をint型にキャストして、そのint型を文字列化して出力しているからです。
    文字と値の対応はアスキーコード表などで検索するといいです。

    //Iはアスキーコードでは十進数で73 //Dはアスキーコードでは十進数で68 //Oはアスキーコードでは十進数で79 //Lはアスキーコードでは十進数で76 char buf[] = "IDOL";//この文字列はchar型の配列と同じ。ただし文字列の終端として\0が付く //char buf[] = { 'I', 'D', 'O', 'L','\x0' }; や //char buf[] = { 73, 68, 79, 76, 0 }; と同じこと char c = buf[0];//char型の配列の最初の文字を取り出す //キャストよりも配列添え字[]の方が優先度が高いので先に処理 int i = (int)c;//char型を符号ありintに拡張。(char型はVC++では符号付8bit) std::cout << i << "\n";//int型の値をコンソールに文字列化して出力 i = (int)buf[1]; std::cout << i << "\n"; i = (int)buf[2]; std::cout << i << "\n"; i = (int)buf[3]; std::cout << i << "\n"; i = (int)buf[4];//文字列の最後には終端文字(\x0)があるので(int)0になる std::cout << i << "\n";//終端文字の0



    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク moriuchi 2015年10月17日 7:53
    • 編集済み gekkaMVP 2015年10月17日 8:05 書き間違い修正
    2015年10月17日 6:58
  • ありがとうございました。10進数に変換されるということですね。

    文字と値の対応はアスキーコード表などで検索するといいです。この部分も見ていたのですがよく理解できませんでしたが解りやすいご説明していただいたことで分かりました。ありがとうございます。また先に進むことができました。

    2015年10月17日 7:57