2012-01-15 40 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 2012-01-15 23:51:16

+0

你說得對。節錄。 – 2012-01-15 23:58:00

0

C和C++沒有定義如何平臺的字節序性質他們在作品運行。因此,語言本身沒有辦法將一系列16位值聲明爲「大端」。

你需要做的是獲取平臺本機端的字符串。如果平臺的尾部不是大端,則進行字節交換。您可以將字節交換版本存儲在std::vector等中。