如何将 const char* 转换为 const unsigned char*
How do I cast a const char* to a const unsigned char*
我想利用这个 post 来更详细地了解关于指针的未签名和已签名的工作原理。我遇到的问题是我必须使用 opengl 中名为 glutBitmapString
的函数,该函数将 void*
和 const unsigned char*.
作为参数 我正在尝试将字符串转换为 const unsigned c_string
.
尝试:
string var = "foo";
glutBitmapString(font, var.c_str());
然而,这并不安静,因为新生成的 c_str
已签名。我想远离铸造,因为我认为这会导致缩小错误。我认为 unsigned char 和 signed char 几乎是同一件事,但两者都进行不同的映射。想到使用 reinterpret_cast,但我不知道它是如何工作的。
在这种特殊情况下(以及几乎所有其他情况下),有符号与无符号指的是指针指向的内容。
unsigned char* == 指向 (unsigned char(s))
的指针
signed char* == 指向 (signed char(s))
的指针
通常,根本没有人将 0xFF 视为数值,有符号与无符号并不重要。情况并非总是如此,有时对于字符串,人们草率地使用 unsigned 与 signed 来指代一种类型而不是另一种类型......但你可能只是投射指针是安全的。
如果您不安全地转换指针,则意味着您指向的数据 invalid/is 格式错误。
要澄清 unsigned char 与 signed char,请查看:
https://sqljunkieshare.files.wordpress.com/2012/01/extended-ascii-table.jpg
char 0xA4 是正数还是负数?两者都不是。是 ñ
。这根本不是一个数字。所以签名与未签名并不重要。说得通?
我会用 reinterpret_cast
:
glutBitmapString(font, reinterpret_cast</*const*/unsigned char*>(var.c_str()));
不违反严格的别名规则的情况很少见。
负值将被解释为无符号(因此值 + 256
)。
我想利用这个 post 来更详细地了解关于指针的未签名和已签名的工作原理。我遇到的问题是我必须使用 opengl 中名为 glutBitmapString
的函数,该函数将 void*
和 const unsigned char*.
作为参数 我正在尝试将字符串转换为 const unsigned c_string
.
尝试:
string var = "foo";
glutBitmapString(font, var.c_str());
然而,这并不安静,因为新生成的 c_str
已签名。我想远离铸造,因为我认为这会导致缩小错误。我认为 unsigned char 和 signed char 几乎是同一件事,但两者都进行不同的映射。想到使用 reinterpret_cast,但我不知道它是如何工作的。
在这种特殊情况下(以及几乎所有其他情况下),有符号与无符号指的是指针指向的内容。
unsigned char* == 指向 (unsigned char(s))
的指针signed char* == 指向 (signed char(s))
的指针通常,根本没有人将 0xFF 视为数值,有符号与无符号并不重要。情况并非总是如此,有时对于字符串,人们草率地使用 unsigned 与 signed 来指代一种类型而不是另一种类型......但你可能只是投射指针是安全的。
如果您不安全地转换指针,则意味着您指向的数据 invalid/is 格式错误。
要澄清 unsigned char 与 signed char,请查看: https://sqljunkieshare.files.wordpress.com/2012/01/extended-ascii-table.jpg
char 0xA4 是正数还是负数?两者都不是。是 ñ
。这根本不是一个数字。所以签名与未签名并不重要。说得通?
我会用 reinterpret_cast
:
glutBitmapString(font, reinterpret_cast</*const*/unsigned char*>(var.c_str()));
不违反严格的别名规则的情况很少见。
负值将被解释为无符号(因此值 + 256
)。