[英]get char out of uint64_t in c
就像標題一樣,我不確定如何獲取字符(在“char”類型中,不僅僅是一個字節,而是相同類型)。例如,來自 uint64_t?
我猜類型轉換不起作用?
非常感謝!
問題是 C 中的一個char
只有一個字節,因此主要可以表示 ASCII 字符。 如果您的角色是 unicode,則根本無法將其轉換為char
。 如果確實希望能夠存儲 unicode 字符,則應使用其他類型,例如wchar_t
(unicode,編譯器相關大小)或char16_t
(utf16 字符,仍然不能表示某些字符,例如 emojis 和其他4 字節字符),甚至char32_t
。
無論哪種方式,只要您使用 ASCII 或 unicode,一個簡單的轉換就可以工作。
注意:無論哪種方式,編譯器都會警告您可能會丟失散文中的數據,因為uint64_t
可以存儲比現有字符更多的值,因此比任何字符類型都大。
因此,如果您想在 int64_t < 255 的情況下獲得 char 值,您可以嘗試先將其轉換為 uint8_t,如下所示:
printf("%c", (int8_t)var);
否則,如果您需要 uint64_t 中的每個字符,您可以嘗試:
void int64ToChar(char mesg[], int64_t num) {
for(int i = 0; i < 8; i++) mesg[i] = num >> (8-1-i)*8;
}
這首先取決於字符(或字符)如何進入uint64_t
值。
如果你說
uint64_t uu = 0x41;
然后uu
包含單個字符的 ASCII 值,將其拉回很簡單。 你甚至不需要演員表:
char c = uu;
printf("%c\n", c); /* prints "A" */
當然,由於它是 64 位寬,一個uint64_t
理論上最多可以有 8 個 8 位 ASCII 字符塞入其中:
uu = 0x48656c6c6f; /* "Hello" in hex */
如果是這樣,您可以使用一些位操作來提取單個字符:
c = (uu >> 24) & 0xff;
printf("%c\n", c); /* prints "e" */
最后,由於uint64_t
比 8 位寬,它還可以包含 Unicode 字符。 例如,我可以寫:
uu = 0x03A3; /* U+03A3 Greek Capital Letter Sigma */
但是現在沒有辦法將它提取為普通的char
,或者使用%c
打印它。 我必須使用wchar_t
和%lc
:
wchar_t wc = uu;
printf("%lc\n", wc); /* might print "Σ" */
請注意,除了使用wchar_t
和%lc
之外,這僅在 output 設備支持 Unicode 並且“區域設置”設置正確時才有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.