簡體   English   中英

在signed char和unsigned char之間轉換,表示UTF8

[英]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_castchar*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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM