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