Windows APIを使用して、Cを除く多くのプログラミング言語でこの質問に対する答えを見つけました。C++の回答はありません。次のことを考慮してください。
#include <windows.h>
char *string = "The quick brown fox jumps over the lazy dog";
WCHAR unistring[strlen(string)+1];
ユニストリングに文字列の文字を入力するには、どの関数を使用できますか?
#include <windows.h>
char *string = "The quick brown fox jumps over the lazy dog";
size_t len = strlen(string);
WCHAR unistring[len + 1];
int result = MultiByteToWideChar(CP_OEMCP, 0, string, -1, unistring, len + 1);
MultiByteToWideChar functionを調べる必要があります。
Unicode に真剣に取り組んでいる場合は、International Components for Unicodeを参照してください。これは、C または C++ で Unicode 変換とストレージを処理するためのクロスプラットフォーム ソリューションです。
たとえば、Microsoft は 16 ビット (UCS-2) と定義するのが時期尚早であり、Unicode が 32 ビットになったときに下位互換性地獄に陥ったため、そもそも UnicodeWCHAR
ではありませんwchar_t
。UCS-2 はほとんどですが、UTF とまったく同じではありません。-16、後者は実際には UTF-8 のようなマルチバイト エンコーディングです。Unicode の「ワイド」形式は 32 ビット (UTF-32) を意味し、それでもコード ポイント (つまり 32 ビット値) と抽象文字 (つまり印刷可能なグリフ) の間に 1:1 の関係はありません。
根拠のない、あいまいな関連リンクのリスト:
mbstowcs
「マルチバイト」からワイド文字列への変換に使用できます。
これは別の方法です。それほど直接的ではありませんが、非常に特定の順序で 6 つの引数を入力したくない場合や、コードページ番号/マクロをMultiByteToWideChar
. このラップトップで実行するのに 16 マイクロ秒かかり、そのほとんど (9 マイクロ秒) がAddAtomW
.
参考までに、MultiByteToWideChar には 0 ~ 1 マイクロ秒かかります。
#include <Windows.h>
const wchar_t msg[] = L"We did it!";
int main(int argc, char **argv)
{
char result[(sizeof(msg) / 2) + 1];
ATOM tmp;
tmp = AddAtomW(msg);
GetAtomNameA(tmp, result, sizeof(result));
MessageBoxA(NULL ,result,"it says", MB_OK | MB_ICONINFORMATION);
DeleteAtom(tmp);
return 0;
}