原文地址:https://argcv.com/articles/2691.c
好多人都喜欢重新造一个轮子, 所以这个世界上的的轮子千奇百怪. 作为在这些轮子下面苟延残喘的洒家,往往不得不无尽的寻找两个轮子之间转换的方法. STL库, 作为标准库, 在写C++的时候理所当然的, 被各种使用. const char * 数组, 作为和C一起过来的小伙伴, 在很多场合下也会被调用. 如果脑抽居然还打算使用Qt, 那么,Qt自带的QString, 恐怕也很难有人能完全不使用. 于是乎, 类型转换就是个问题了.
const char * 数组和 STL的转换, 这两者的转换最为常见.
const char * => STL 我一般直接使用
const char * s = "hello , world!";
string str(s);
直接赋值完毕了.
如果是作为一个参数,还可以直接用调用string的构造函数.
const char * s = "hello const char";
string s1("hello , string1 ");
string s2 = s1 + string(s);
s2就这样轻松搞定.
需要注意的是, string 的拼接不建议用上述的写法, 若条件允许, 写成这样会更好一些:
const char * s = "hello const char";
string s1("hello , string1 ");
s1 += string(s);
string 到const char *就更加简单了
string str("hello world !");
const char * s = str.c_str();
不过需要注意的是,这个当前stack下只能被调用一次,就会被系统自动释放掉. 当然,你可以作为参数传入某个function,然后被调用很多遍,然后一return这个s就不能再用了. 所以这个 .c_str() 似乎专门就是为了传参时候的类型转换用的.
QString这个第三者的加入 const char * => QString, QString当然不敢不支持. 和STL的string一样,
const char * s = "hello , world !";
QString qs1(s);
QString qs2 = qs1.append(QString(s));
两种方法都是可以的.
如果需要特定编码的话,还可以
QString qs3= QString(QLatin1String(s));
QString qs4 = QString::fromLocal8Bit(s);
而QString=> *有很多方法.最直白的是这样的
QString qs1= "Hello , world !";
QByteArray ba = qs1.toLocal8Bit();
const char *s = ba.data();
const char *s2 = ba.constData();
当然还可以这样:
QString qs1= "Hello , world !";
string str = qs1.toStdString();
const char *s= str.c_str();
其实就是先转为 STL 的 string 再转为 const char *.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="gb2312"> &l
光懂得给MacBook连接外置显示器还不行,了解这几点,才能让Mac外接显示器更好用。可以在两个显示器桌面之间任意拖拽移动软件窗口,这也是双(多)显示器一个高效的地方。将外接显示器设置为最佳分辨率MacBook连接上外接显示器后,打开【系统偏好设置】-【显示器】,会在 MacBook 显示器和外置显示器同时打开显示器设置窗口。外接显示器分辨率应设置为显示器本身最大支持的分辨率。一般会自动选择为【显示器默认】,就是最佳分辨率,就不需要做任何设置。如果默认分辨率不对,手动选择【缩放】,并选
本文介绍了一些可以用来监控网络使用情况的Linux命令行工具。这些工具可以监控通过网络接口传输的数据,并测量目前哪些数据所传输的速度。入站流量和出站流量分开来显示。一些命令可以显示单个进程所使用的带宽。这样一来,用户很容易发现过度使用网络带宽的某个进程。这些工具使用不同的机制来制作流量报告。nload等一些工具可以读取"proc/net/dev"文件,以获得流量统计信息;而一些工具使用pcap库来...
1、慢 SQL 性能下降、 SQL 慢、执行时间长、等待时间长的原因分析 查询语句写的烂索引失效: 单值索引:在user表中给name属性建个索引,create index idx_user_name on user(name)复合索引:在user表中给name、email属性建个索引,create index idx_user_nameEmail on user(name,email) 关联查询太多join(设计缺陷或不得已的需求)服务器调优及各个参数设置(缓冲、线程数等) 2、jo
描述三角波三角波(TriangularWave)也称锯齿波,是指主要用在CRT作显示器件的扫描电路中的波形。如示波器,显像管,显示器等.CRT是由许多点组成的。要形成光栅就要有电子束轰击这些发光点。扫描电路分水平和垂直扫描两种。可以一行或一帧的对CRT进行扫描。电子束从第一行或帧的一端开始扫到另一端,马上返回扫第二行或第二帧。三角波的特点是电压渐渐增大突然降到零。正好适合用于扫描电路中。正弦波正弦...
需求下载win10镜像文件方法下载MediaCreationTool:https://www.microsoft.com/zh-cn/software-download/windows10启动MediaCreationTool选择:选择需要的windows版本选择ISO file点击Next,并选择ISO下载文件的存储位置,即可实现ISO文件的下载。参考[1] http...
Valgrind内存泄漏检测工具是一个十分便捷的工具,可以很快速的检测出所写程序是否存在内存泄漏现象,这对于C/C++程序员显得尤为重要,因为不论你有多牛逼,也难以保证自己不会忘写一个delete或者free。一:安装步骤首先下载一个Valgrind安装包。1.解压安装包 zip格式用 uzip Valgrind.xx.zip,解压完成之后进入该文件夹。2.运行./autogen.sh设置环境在执...
最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题, 用以下方法执行的时候每次都会等待很长一段时间,原因是因为对selenium实现方法了解不足导致一直找不到解决方法。 private boolean isElementPresent(By by) { try { driver.findElement(by);
高级指南1、文件上传1.1 架构考虑# 应用中通常有两种方式来保存二进制数据:将数据保存到服务器的文件系统中,或者直接保存到数据库中。当然这两种实现各有利弊,使用文件系统非常容易,而使用数据库则具有事务处理支持,但两者都有通病,那就是很难扩展。 这一节需要向读者着重强调的是,Play中提供的play.db.jpa.Blob类型,与
一、简介 在上篇中我们详细分析过,.NET框架2.0版本提供了一个新的命名空间(System.Net.Mail)和一些发送电子邮件的新类(注意:.NET框架1.x版本中提供的命名空间System.Web.Mail及相关的类仍然可以使用,以实现向后兼容性)。而且,我们还详细分析过如何使用System.Net.Mail命名空间中的MailMessage和SmtpClient类来发送简单的普通文本
Vue浏览器微信/支付宝支付微信支付// 微信支付 wxpay () { let params = { actCode: this.actCode,// 活动编号 channelType: 'WxPay', // 支付方式 clientType: this.clientType, // 渠道(未传,浏览器后端默认设置的web, iOS/ Android/, 详情请查看底部获取渠道代码) mobile: localStor
概述HBase是一个构建在HDFS上的分布式列存储系统;HBase是基于Google BigTable模型开发的,典型的key/value系统;HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储;从逻辑上讲,HBase将数据按照表、行和列进行存储。与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算...