std::string和cha*的转换
2015-10-23 19:38
344 查看
个人觉得这个是c++的唯一难点,记一下吧,每次都不记得
第二个难点是无法引用的外部符号,尼玛,又碰到,不想活了
std::string使用很方便,但有时会碰到这样的问题,比如我们有一个结构体,内容如下所示:
typedef struct _datainfo
{
int i;
unsigned time;
} DATAINFO;
DATAINFO stInfo;
stInfo.i = 10;
stInfo.time = time(NULL);
如果要把这个结构体的内容保存到一个string,通常的作法是什么呢?
char buf[512];
string strData;
memcpy(char*(buf), (char *)&stInfo, sizeof(stInfo));
strData = string((char *)buf);
其实我们忽略了一点,就是string也是用char *来保存数据内容的,而c_str()接口就返回了这个头指针。与普通的字符串不同的是,它的长度并不是以/0结尾去判断的,而是通过成员变量里的size决定的,知道了这一样,我们就可以把string当char *来使用了。
string strData;
strData.resize(sizeof(stInfo));
memcpy((char *)strData.c_str(), (char *)&stInfo, sizeof(stInfo));
这样就可以实现了,知道了这一点,我们就可以用string干更多的事情,要注意的就是在每次内容修改之前,要进行resize成新的大小。
第二个难点是无法引用的外部符号,尼玛,又碰到,不想活了
std::string使用很方便,但有时会碰到这样的问题,比如我们有一个结构体,内容如下所示:
typedef struct _datainfo
{
int i;
unsigned time;
} DATAINFO;
DATAINFO stInfo;
stInfo.i = 10;
stInfo.time = time(NULL);
如果要把这个结构体的内容保存到一个string,通常的作法是什么呢?
char buf[512];
string strData;
memcpy(char*(buf), (char *)&stInfo, sizeof(stInfo));
strData = string((char *)buf);
其实我们忽略了一点,就是string也是用char *来保存数据内容的,而c_str()接口就返回了这个头指针。与普通的字符串不同的是,它的长度并不是以/0结尾去判断的,而是通过成员变量里的size决定的,知道了这一样,我们就可以把string当char *来使用了。
string strData;
strData.resize(sizeof(stInfo));
memcpy((char *)strData.c_str(), (char *)&stInfo, sizeof(stInfo));
这样就可以实现了,知道了这一点,我们就可以用string干更多的事情,要注意的就是在每次内容修改之前,要进行resize成新的大小。
相关文章推荐
- java中的代码初始化顺序
- 冰材质1-iceTrans
- Swift高级开发语言--结构体,类,构造器,属性
- Java-ServletContext
- Java-ServletContext
- Swift 基础语法 <与 OC作对比>
- Java-ServletContext
- ORACLE查看并修改最大连接数
- Java Web 路径问题
- LeetCode OJ:Invert Binary Tree(反转二叉树)
- 测试管理——库管理和版本控制
- 腾讯首次公布微信最全用户数据【完整版】
- 腾讯首次公布微信最全用户数据【完整版】
- VS使用和错误收集
- Redis和Memcached的区别
- MSBuild 命令行参考
- 共用体和枚举,写写意思下
- C语言中的函数
- std::list主要函数
- C++调用构造函数与析构函数的顺序