UTF-16BE字符串我需要定義的Unicode字符串,看起來像這樣:定義在C++
const char SOME_STRING[] = { 0, 5, 0, 'M', 0, 'y', 0, 'S', 0, 't', 0, 'r' };
這是大端短含有長度前綴UTF-16BE字符串,它在Java中使用,而這正是我需要它。有沒有比單獨輸入每個字符更好/更清晰的方式來聲明它?
UTF-16BE字符串我需要定義的Unicode字符串,看起來像這樣:定義在C++
const char SOME_STRING[] = { 0, 5, 0, 'M', 0, 'y', 0, 'S', 0, 't', 0, 'r' };
這是大端短含有長度前綴UTF-16BE字符串,它在Java中使用,而這正是我需要它。有沒有比單獨輸入每個字符更好/更清晰的方式來聲明它?
你可以使用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;
}
C和C++沒有定義如何平臺的字節序性質他們在作品運行。因此,語言本身沒有辦法將一系列16位值聲明爲「大端」。
你需要做的是獲取平臺本機端的字符串。如果平臺的尾部不是大端,則進行字節交換。您可以將字節交換版本存儲在std::vector
等中。
@Nicol Bolas:爲什麼它不適用於大端平臺?它會得到一個'wchar_t'並移動或掩蓋該值。這對排序不敏感。 – MRAB 2012-01-15 23:51:16
你說得對。節錄。 – 2012-01-15 23:58:00