c++ - 从二进制文件中读取 char*

标签 c++ binary char ifstream

我必须将文件名存储到我正在编写的二进制文件中,我目前是这样编写的:

void write(map<char, bits> &bitstring,map<char,int> &ccount, string header,string fname,ofstream     &outf)
{
ifstream inf(header+fname);
cout << "FName: " << fname << endl;
const char * pName = fname.c_str();
fname = header+ fname + ".mcp";
const char * c = fname.c_str();
FILE* pFile;
pFile = fopen(c, "w+b");
inf.seekg(ios::beg, ios::end);
int size = inf.tellg();
int length = 0;
string data = "";
int magicNum = 2262;
int fileNameSize = strlen(pName);
fwrite(&fileNameSize, sizeof(int), 1, pFile);
cout <<"FIle Name Size: "<< fileNameSize << endl;
fwrite(pName, fileNameSize, 1, pFile);
fclose(pFile);

}

而且我还发送文件名的大小,以便我知道需要读取多少数据才能获取整个文件名。

void read2(string fname, map<char, int> &charCounts, std::vector<bool> &bits,ofstream &outf)
{
string fname1 = fname + ".mcp", outfile = "binarycheck";

bool testDone = false, counts = false;
std::ifstream inf(fname1, std::ios::binary);
std::ofstream ouf("binarycheck.txt", std::ios::binary);
char character;

int count[1] = { 0 };
int checkcount = 0;
int mNum[1] = { 0 }, size[1] = { 0 };


int FNamesize = 0;
inf.read((char*)&FNamesize, sizeof(int));
char *name=new char[FNamesize+1];
inf.read(name, FNamesize);
name[FNamesize] = '\0';
string str(name);
cout << "File Name: ";
cout << std::string(name) << endl;
cout << "Magic Num: " << mNum[0] << endl;
cout << "File Name Size: " << FNamesize<< endl;


inf.close();
}

我正确地获得了大小,但我不知道如何迭代名称以便将其另存为字符串。我尝试使用 vector ,但它并没有真正帮助,因为 inf.read 使用 char* 作为其第一个参数。 任何帮助都会很棒。

最佳答案

好吧,在一次偶然的事故中,我最终解决了自己的问题。由于某种原因,当我声明时

FILE* pFile;
pFile = fopen(c, "w+b"); 

声明之前

const char * pName = fname.c_str();

该调用在将 pName 的值写入文件之前损坏了该值,这就是导致错误的原因。问题解决了!

关于c++ - 从二进制文件中读取 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26377529/

相关文章:

c++ - 用于替换其参数中的标识符的宏

c++ - Switch 语句可变模板扩展

macos - 使用应用程序加载器将 Mac OS X 二进制文件上传到 itunesconnect?

c++ - 检查二进制数在特定位置是否有 '0' 或 '1'

c++ - 在非静态成员函数上使用 C++ 11 多线程

c++ - 在模板类中重载下标运算符

JavaScript Base 64 解码二进制数据不起作用

MySQL 替换为 Char 函数

c++ - Char 是算术类型吗?

java - 小写字母到大写的 java 示例 Shildt