C字符串-使用字符串时,指向有符号字符和无符号字符的指针有区别吗



这个问题最初源于我目前正在使用Rust的OpenGL绑定。

OpenGL函数返回无符号字符指针的签名示例:

const GLubyte* glGetString(GLenum name);

然而,Rust中一些将C字符串转换为安全抽象的函数需要consti8*类型的指针(因此,相当于C中的有符号字符(。

现在,我的问题是,有符号和无符号字符指针之间的转换是否会使我潜在地丢失有关字符串字符的信息

我知道有符号和无符号字符都有相同的大小,我也意识到在有符号和有符号类型(如char(之间转换会改变数字的解释方式,但我不确定的是,当将它们打印到屏幕或保存到文件时,这种数字解释是否真的对较低级别的字符串很重要。

指针类型之间的转换永远不会使您丢失信息,因为无论您将指针存储在哪种类型中,指针都只是一个地址。

指针的类型只是关于如何处理指向的数据的信息。

对于您的问题,如果您只使用带有7位字符的ASCII(简而言之,只有英文字符(,则不会通过将无符号字符传递给有符号字符或将有符号字符传递给与无符号字符来丢失任何信息。因为字符类型通常使用8位,而带符号的位是ASCII 7位不使用的位。

只要您坚持使用ASCII 7位,有符号字符或无符号字符将具有相同的值。

与Stiven相同,只是即使是UTF-8 8位字符也无关紧要。当您对项进行算术运算时,signed和unsigned只会产生不同的结果,而字符串字符不应该出现这种情况。

最新更新