スポンサーリンク

| キーワード:

VC++の文字コード-wchar_tとかcharとかLとかLなしとかその他

LつきとLなしの違い

“hello”

とやったときと、

L“hello”

では、どう違うのかという話です。

例えば、このようなプログラムを書きます。

int main()
{
  {
    FILE* fp = fopen("output-char-abc", "wb");
    char* s = "abc";
    fwrite(s, 1, 3, fp); // 3 byte 出力
    fclose(fp);
    output-char-abc  

  }
  {
    FILE* fp = fopen("output-char-あいう", "wb");
    char* s = "あいう";
    fwrite(s, 1, 6, fp); // 6 byte 出力
    fclose(fp);
    output-char-あいう 
  }

  {
    FILE* fp = fopen("output-wchar-abc", "wb");
    wchar_t* s = L"abc";
    fwrite(s, 1, 6, fp); // 6 byte 出力
    fclose(fp);
    output-wchar-abc 
  }
  {
    FILE* fp = fopen("output-wchar-あいう", "wb");
    wchar_t* s = L"あいう";
    fwrite(s, 1, 6, fp); // 6 byte 出力
    fclose(fp);
    output-wchar-あいう 
  }

  return 0;
}

 

このように、sの指す文字列の中身は、

LがついているときはUTF16

ついていないときはShiftJIS

になります。

 

・プロジェクトの設定の「文字セット」

次に、プロジェクト設定の「文字コード」を、マルチバイト文字セットとUnicode文字セットでそれぞれ保存してみます。

source-char-test-multibyte

source-char-test-unicode

この場合も、当然ですが、””とL””の結果も変わりません。上記したプログラムの挙動は、「文字セット」に関わらず同じです。

 

つぎに、プログラムの先頭にコメントで何らかの日本語を書いてみます。

source-char-test

結果はこのように、どちらの設定でもUTF16になります。

source-char-test-unicode-stir

 

文字セットの設定はソースファイルの文字コードに影響を与えません。

ちなみにソースコードの文字コードを変えるには

VisualStudioで文字コードを変更する

等の方法があるようです。

 

では「文字セット」は、Visual Studioの何に影響を与えるのでしょうか。

mojiset_unicode

mojiset_mbcs

 

このように、「文字セット」の設定によって、マクロ

_UNICODE

UNICODE

または

_MBCS

が 定義されます。

 

つまり、「文字セット」の指定は

_UNICODEマクロが定義されるかどうか

の指定という意味です。

 

(続く…)

 

 

 

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: