首页 文章

C:char与非ASCII文本数据的unsigned char

提问于
浏览
5

这个问题:

What is an unsigned char?

在C中讨论char与unsigned char vs. signed char的工作做得很好 .

但是,它不直接解决非ASCII文本应该使用的内容 . 因此,如果我有一个字节数组,表示某些任意字符集中的文本,如UTF-8或Big5(或有时是ASCII),我应该使用char或unsigned char数组吗?

我倾向于使用char,因为否则当数组为ASCII并且我使用strlen时,gcc会给出关于指针签名的警告 . 但我想知道什么是正确的 .

2 回答

  • 2

    使用普通char表示字符 . 如果需要包含 -127 to +127 值的有符号整数类型,请使用signed char . 使用unsigned char表示具有 0 to 255 值范围的无符号整数类型 .

  • 2

    你问的问题可能比你期望的要广泛得多 .

    要直接回答它,大多数实现使用"byte"作为底层缓冲区 . 在那个方面,标准 uint8_t typedef是你最好的选择 . 这主要是因为大多数字符集使用可变数量的字节来存储字符,因此单独的字节处理在编码和解码过程中是必不可少的 . 它还简化了不同"endianess"之间的转换 .

    一般来说,在ASCII编码或其他单字节代码页(0-255范围)以外的任何地方使用 strlen 是不正确的 . 对于任何多字节编码,如Big5,UTF-8/16或Shift-JIS,它肯定是不正确的 .

相关问题