我想利用这篇文章更详细地了解有关指针的未签名和签名工作。我遇到的问题是我必须使用一个名为glutBitmapString
的opengl函数,该函数作为参数a void*
和const unsigned char*.
我试图将字符串转换为const unsigned c_string
。
尝试:
string var = "foo";
glutBitmapString(font, var.c_str());
然而,这并不安静,因为新生成的c_str
已签名。我想远离施法,因为我认为这会导致缩小错误。我认为unsigned char和signed char几乎是一样的,但两者都做了不同的映射。我想到了使用reinterpret_cast,但我不知道它是如何工作的。
答案 0 :(得分:3)
我会使用reinterpret_cast
,这是一种罕见的情况,严格的别名规则不会被破坏。
负值将被解释为无符号(因此值+ 256
)。
答案 1 :(得分:1)
在这种特殊情况下(以及几乎所有其他情况),signed with unsigned指的是指针所指向的内容。
unsigned char * ==指向(unsigned char(s))的指针
signed char * ==指向(signed char(s))的指针
通常,没有人将0xFF视为数值,而签名与无符号并不重要。情况并非总是如此,有时用字符串人们粗略地使用unsigned vs signed来引用一种类型而不是另一种类型....但是你可能只是投掷指针是安全的。
如果您不安全地投射指针,则表示您指向的数据无效/格式错误。
要澄清unsigned char与signed char,请查看以下内容: https://sqljunkieshare.files.wordpress.com/2012/01/extended-ascii-table.jpg
char 0xA4是正还是负?它既不是。它是ñ
。它根本不是一个数字。签名与未签名并不重要。合理?