c - 为什么用 short* 而不是 char* 作为字符串? char* 和 unsigned char* 的区别?

标签 c character-encoding char unsigned short

正如标题所说,我有两个问题。

编辑:澄清一下,他们实际上并没有使用 charshort,他们确保它们是 8 位和 16-由特定的 typedef 位。实际类型称为 UInt8UInt16

<强>1。问题

iTunes SDK 在需要字符串 的地方使用unsigned short*。用它代替char*/unsigned char*有什么好处?如何将其转换为 char*,使用此类型时有何不同?

<强>2。问题

当必须存储字符串时,我只见过char*。那我什么时候应该使用 unsigned char* 呢,或者它没有任何区别吗?

最佳答案

unsigned short 数组可以与宽字符串一起使用 - 例如,如果你有 UTF-16 编码的文本 - 虽然我希望在这些情况下看到 wchar_t .但他们可能有他们的理由,比如在 MacOS 和 Windows 之间兼容。 (如果我的消息来源是正确的,MacOS 的 wchar_t 是 32 位,而 Windows 是 16 位。)

您可以通过调用适当的库函数在两种类型的字符串之间进行转换。哪个功能合适要视情况而定。 SDK 不是自带的吗?

并且 char 而不是 unsigned char,好吧,历史上所有的字符串都是用 char 定义的,所以切换到 unsigned char 会引入不兼容性。
(切换到 signed char 也会导致不兼容,但不知何故不会那么多...)

编辑 现在问题已被编辑,请允许我说我在输入答案之前没有看到编辑内容。但是,是的,由于上述原因,UInt16 比 wchar_t 更能代表 16 位实体。

关于c - 为什么用 short* 而不是 char* 作为字符串? char* 和 unsigned char* 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9295363/

相关文章:

r - knitr 用中文编译文档

c++ - 分配给 char[8] 的 vector

java - Arrays.equals 是否可以与 java 中的字符一起使用

mysql - 使用gcc的C代码无法链接到mysql头?

c - 使用 if 语句的 union 输出

javascript,我们如何读取带有重音字母的本地文本文件?

ios - HTTP 请求中的奇怪字符

c - 如何在 c 结构中使用指向字符的指针?

c - 多线程没有明显的性能提升

c - 空指针不在 C 中保持为空