如何将常量字符*转换为常量无符号字符*
How do I cast a const char* to a const unsigned char*
我想利用这篇文章来更详细地了解未签名和已签名如何处理指针。我遇到的问题是我必须使用来自 opengl 的名为glutBitmapString
的函数,当我尝试将字符串转换为常量无符号c_string
时,该函数将void*
和常量无符号char*.
作为参数。
尝试:
string var = "foo";
glutBitmapString(font, var.c_str());
但是,这并不安静,因为新生成的c_str
已签名。我想远离选角,因为我认为这会导致缩小误差。我认为无符号字符和有符号字符几乎是一回事,但两者都执行不同的映射。我想到了使用reinterpret_cast,但我不知道它是如何工作的。
我会使用reinterpret_cast
:
glutBitmapString(font, reinterpret_cast</*const*/unsigned char*>(var.c_str()));
这是很少有严格混叠规则未被破坏的情况。
负值将被解释为无符号(因此值 +256
(。
在这种特殊情况下(以及几乎所有其他情况(,有符号与无符号是指指针指向的内容。
无符号字符* == 指向(无符号字符(的指针
有符号字符* == 指向(有符号字符(的指针
通常,根本没有人将0xFF视为数值,有符号与无符号并不重要。 并非总是如此,有时使用字符串人们草率地使用无符号与签名来指代一种类型而不是另一种类型......但你只是投射指针可能是安全的。
如果您不安全地转换指针,则意味着指向的数据无效/格式错误。
要澄清无符号字符与签名字符,请查看以下内容: https://sqljunkieshare.files.wordpress.com/2012/01/extended-ascii-table.jpg
字符0xA4是正数还是负数? 都不是。 这是ñ
. 这根本不是一个数字。 所以签名与未签名并不重要。 有意义?
相关文章:
- 如何循环访问常量字符**?
- constexpr 函数获取常量字符*
- 如何计算常量字符**中的总字符数?
- QDial:如何将 int 值传递给需要常量字符*的 Qfile?
- 为什么 std::string_view 比常量字符*快?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 在编译时将常量字符* 转换为常量 char_type*
- 将字符串数组传递给接受常量字符**的函数
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 字符串强制转换为常量字符*
- 使用常量字符*时退出代码 139
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 无法<string>从"常量字符 []"转换为<类名>
- 初始化常量字符* 数组
- 常量字符*的性质是什么?
- C++ 获取向量中常量字符* [ ] 的长度
- 无法将参数 1 从 WCHAR 转换为常量字符 *
- 如何在 c++ 中将向量转换为<string>常量字符* const*?
- C++将常量字符* 指针数组传递给对象