2012-01-15 3 views
1

にUTF-16BE文字列の定義:私はそうのようになります。Unicode文字列を定義する必要がC++

const char SOME_STRING[] = { 0, 5, 0, 'M', 0, 'y', 0, 'S', 0, 't', 0, 'r' }; 

これは、短い長さを含むビッグエンディアンで先頭に付加UTF-16BE文字列である、それはJavaで使用され、それが何です私はそれが必要です。別々にすべての文字を入力するよりも宣言するほうが良い/きれいな方法がありますか?

答えて

0

次の例のように、必要に応じてバイトに変換し、代わりにwchar_tを使用することもできます。

const wchar_t some_string[] = L"\x05MyStr"; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    for (int i = 0; i <= some_string[0]; i++) 
     printf("%d %d ", some_string[i] >> 8, some_string[i] & 0xFF); 

    return 0; 
} 
+0

@Nicol Bolas:なぜビッグエンディアンプラットフォームで動作しないのですか? 'wchar_t'を取得し、値をシフトまたはマスクします。それはエンディアンに敏感ではありません。 – MRAB

+0

あなたはそうです。修正されました。 –

0

CおよびC++は、彼らが作品上で実行されているプラ​​ットフォームの方法エンディアン性質を定義していません。したがって、16ビット値のシーケンスをビッグエンディアンと宣言する方法は、言語自体の中にありません。

あなたがしなければならないことは、プラットフォームのネイティブエンディアンで文字列を取得することです。その後、プラットフォームのエンディアンがビッグエンディアンでない場合、バイトスワップを行います。バイトスワップされたバージョンは、std::vectorなどで保存できます。

関連する問題