二进制读取文件内容怎么转换成string?

loveshell 2008-04-01 03:41:20
  FILE *file = fopen(_mail_info->_filename.c_str(), "rb");

if (file == NULL)
return "";

fseek(file, 0, SEEK_END);
int len = ftell(file);
rewind(file);

char *buffer = new char[len];
int n=fread(buffer, sizeof(char), len, file);
std::string content;

我想把buffer的内容复制给content,如果直接赋值的话遇到0就会截断。现在我自己的方法是
std::string content="";
int i;
for (i=0;i<n;i++ )
{
content=content+*(buffer+i);
}

但是这样很占CPU,有什么好的办法?
...全文
402 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
linfengc 2008-04-01
  • 打赏
  • 举报
回复
string content(buffer);
帅得不敢出门 2008-04-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 Wolf_FienD 的回复:]
引用 6 楼 queshangxintou 的回复:
strcpy就行


不行滴 人家是 二进制的 又不是 char 的

用 memcpy
[/Quote]

恍然 二进制 strcpy后输出的只是二进制的 而不是字符
Wolf_FienD 2008-04-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 queshangxintou 的回复:]
strcpy就行
[/Quote]

不行滴 人家是 二进制的 又不是 char 的

用 memcpy
Chappell 2008-04-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 queshangxintou 的回复:]
strcpy(string.c_str(), buffer)
[/Quote]

这样子是不行的
qmm161 2008-04-01
  • 打赏
  • 举报
回复
干嘛非得一个一个得加? C++ 里的 string 不是支持 + 的么
qmm161 2008-04-01
  • 打赏
  • 举报
回复
你这是 C 还是 C++ ?
queshangxintou 2008-04-01
  • 打赏
  • 举报
回复
strcpy(string.c_str(), buffer)
queshangxintou 2008-04-01
  • 打赏
  • 举报
回复
strcpy就行
hastings 2008-04-01
  • 打赏
  • 举报
回复
std::string content;
content.resize(len+1);
memcpy(const_cast<char*>(content.c_str()),buffer,len);
content[len]='\0';
Chappell 2008-04-01
  • 打赏
  • 举报
回复
//当你在构造函数中指定个数时,是不会发生截断的。
#include <iostream>
#include <string>
using namespace std;


void main()
{
char s[]="string\0string";
string str(s,10);
for(int i = 0;i<10;i++)
cout<<str[i];
cout<<endl;
}
//输出结果
//string str
ouyh12345 2008-04-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 loveshell 的回复:]
再问一个比较低级的问题
std::string类型怎么分配内存,怎么作为memcpy的参数?
[/Quote]

与其const_cast<char *>str.c_str()
不如直接使用字符串,拷贝完后再赋值到string里
loveshell 2008-04-01
  • 打赏
  • 举报
回复
再问一个比较低级的问题
std::string类型怎么分配内存,怎么作为memcpy的参数?
ouyh12345 2008-04-01
  • 打赏
  • 举报
回复
memcpy

64,688

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧