簡體   English   中英

從 c 中的 uint64_t 中獲取字符

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

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