[英]Convert between signed char & unsigned char representing UTF8
我在同一個項目中使用libxml2和ICU。 它們以不同的方式代表UTF8。 libxml2使用unsigned char *,ICU構造函數接受普通char *(在我的Pentium 64位上相當於signed char)。
問題:如何在兩者之間進行轉換? 我可以使用static_cast嗎?
我知道UTF8只關心底層數據類型至少8位長。 signed char和unsigned char都滿足此要求。 我只是想知道這里有沒有問題? 任何角落案件?
編輯:在我的編譯器(g ++ / Gentoo)堅持下,只有reinterpret_cast才能進行這種轉換(不依賴於C風格的轉換)。 假設我們有兩個無符號字符串:0000和1000.轉換將它們都變為0.這是否可以在UTF8下進行?
一些庫使用char
來存儲UTF-8,其他庫使用unsigned char
。
在這種情況下,您可能需要使用reinterpret_cast
在char*
和unsigned char*
進行轉換,因為這些類型具有相同的存儲單元大小和對齊方式。 例如:
char const* s = ...;
unsigned char const* p = reinterpret_cast<unsigned char const*>(s);
static_cast
總是可以通過中間轉換為void*
來模擬reinterpret_cast
,例如char* -> void* -> unsigned char*
,例如:
char const* s = ...;
void const* intermediate = s;
unsigned char const* p = static_cast<unsigned char const*>(intermediate);
如果unsigned char *只是一個指向字符串的指針,它不應該導致任何問題。
沒關系。 在任何情況下,只要您需要從char *或unsigned char *流中提取char,您將需要一個庫提供的函數,該函數將提取一個int並以對您不透明的方式更新指針/迭代器(呼叫者,召集者)
謝謝大家。 邁克說得最好:差別沒有區別,“一個字節是一個字節是一個字節”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.