如何将const char *转换为const unsigned char *

时间:2017-08-05 00:13:09

标签: c++ opengl

我想利用这篇文章更详细地了解有关指针的未签名和签名工作。我遇到的问题是我必须使用一个名为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,但我不知道它是如何工作的。

2 个答案:

答案 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是正还是负?它既不是。它是ñ。它根本不是一个数字。签名与未签名并不重要。合理?