当前位置:  开发笔记 > 编程语言 > 正文

C++样式从unsigned char*转换为const char*

如何解决《C++样式从unsignedchar*转换为constchar*》经验,为你挑选了5个好方法。

我有:

unsigned char *foo();
std::string str;
str.append(static_cast(foo()));

错误: invalid static_cast from type ‘unsigned char*’ to type ‘const char*’

在C++风格中投射的正确方法是什么?



1> Brian R. Bon..:

char *并被const unsigned char *认为是不相关的类型.所以你想要使用reinterpret_cast.

但是如果你要从const unsigned char*const类型转变,你需要先使用const_cast.reinterpret_cast不能抛弃constvolatile资格.


"不相关"在这里有误导性:它给人的印象是你无法从一个人投射到另一个人.我正在阅读2014年的草稿,"3.9.1基本类型",它说:"``char`,`signed char`和`unsigned char`占用相同数量的存储并具有相同的对齐需求".这是一种关系.或者这里有一个更易读的链接:https://en.cppreference.com/w/cpp/language/types#Character_types

2> JaredPar..:

尝试 reinterpret_cast

unsigned char *foo();
std::string str;
str.append(reinterpret_cast(foo()));



3> Ruben Bartel..:

reinterpret_cast的


好的例子?
我特别喜欢你如此关注喊"第一次!" 你甚至不打扰"基本格式化".
这是一个真正无用的"答案".它根本不提供任何信息.
@ jesses.co.tt感谢您的downvote.这篇文章的主要特点是它的及时性.其他答案提供了各种细节,最好单独阅读和推荐.如果[@JaredPars回答](http://stackoverflow.com/a/658924/11635)涵盖了您正在寻找的内容,我会使用它和/或对其进行投票.你会注意到我已经投入时间来改进那些格式.我真的没有意识到扩大这个答案以包含其他人的内容.

4> AJG..:

unsigned char*基本上是一个字节数组,通常用于表示原始数据而不是字符串.unicode字符串将表示为wchar_t*

根据C++标准,unsigned char*和char*之间的reinterpret_cast是安全的,因为它们具有相同的大小并且具有相同的构造和约束.我总是试图避免reintrepret_cast比const_cast更多.

如果静态转换失败了你正在做的事情你可能想重新考虑你的设计,因为坦率地说,如果你使用的是C++,你可能想利用"plus plus"部分提供的东西并使用字符串类和STL(aka std :: basic_string可能对你更好)



5> Timo Geusch..:

您需要使用a,reinterpret_cast<>因为您之间的两种类型彼此无关.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有