c - 转换是否会在整个系统中保持低位字节一致?

标签 c unicode casting endianness

假设我在 wchar_t x;

中有一个 unicode 字符

当然,将x 转换为ASCII 的明显方法是使用wctob。功能

但我想知道,因为 the first 255 characters of Unicode correspond with ASCII , 转换为 char 是否可以跨平台一致地工作?

char c = (char) x ; // cast to char, this works on Windows

问题是,转换为 char 会保证保留低位,还是可能保留高位? (我担心这里的小端/大端情况,虽然我意识到如果它在我的小端系统上工作,它肯定应该在大端系统上工作)。

最佳答案

为了简洁起见,我随意使用了一些术语。为避免混淆,强烈建议仔细研究 definitions至少包含以下术语:ASCII、Unicode、UCS、UCS-2、UCS-4、UTF、UTF-8、UTF-16、UTF-32、字符、字符集、编码字符集、指令集、编码单元

字符“Q”的代码在 ASCII 和 Unicode 中都是 81。

81 只是一个整数,就像任何其他整数一样。 char 变量可以存储数字 81。wchar_t 变量可以存储相同的数字 81。在这两种情况下,我们解释 81 为“Q” .

询问数字 81 在从例如longshort。如果合适,那么您就准备好了。没有字节序或高位或低位或任何涉及的东西。

当您转换通过网络存储字符或字节流的文件时,字节序和位以及其他东西开始变得重要,就像存储(二进制表示)任何旧数字的文件一样。

关于c - 转换是否会在整个系统中保持低位字节一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14035751/

相关文章:

c - 进程树,如何查找所述进程是否为根进程?

c - 如何在 Windows 上使用 getaddrinfo()

c++ - 在 C/C++ 中使用带有 GPGME 的特定公钥验证 GPG 签名

python - 如何在 python 中轻松地以 unicode 编码一长串十六进制值

python - 如何检查是否分配了 Unicode 代码点?

java - 为什么基于 Class.class 的转换有效但 getClass 无效?

c - 在结构中使用什么级别的间接寻址?

Java Unicode 到十六进制字符串

java - 强制转换和泛型如何工作?

java - 我怎样才能从一个唯一的字符串生成一个唯一的整数?