5

Windows APIを使用して、Cを除く多くのプログラミング言語でこの質問に対する答えを見つけました。C++の回答はありません。次のことを考慮してください。

#include <windows.h>
char *string = "The quick brown fox jumps over the lazy dog";
WCHAR unistring[strlen(string)+1];

ユニストリングに文字列の文字を入力するには、どの関数を使用できますか?

4

6 に答える 6

12

MultiByteToWideChar:

#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);
于 2012-07-20T09:48:24.813 に答える
2

MultiByteToWideChar functionを調べる必要があります。

于 2012-07-20T09:48:57.000 に答える
2

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 の関係はありません。

根拠のない、あいまいな関連リンクのリスト:

于 2012-07-20T09:50:44.060 に答える
0

mbstowcs「マルチバイト」からワイド文字列への変換に使用できます。

于 2012-07-20T09:48:35.373 に答える
0

これは別の方法です。それほど直接的ではありませんが、非常に特定の順序で 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;
}
于 2018-03-30T16:11:20.110 に答える