C++ 数据转换 如何将文本文件(.txt)转换成二进制文件(.dat)?

有什么方法可以把int 类型的数组转换成 unsigned char的数组? 因为我现在从文本文件读取(0-255)的数据,一行一个数据,读取到在int数组每个数据占用三个字节,我想只占用一个字节,然后保存二进制文件,请问怎么可以解决呢? 例如,文本文件数据是255,这样写入之后二进制文本之后
//ofstream fout("Binary.dat", ios_base::out | ios_base::binary);
for (i = 0; i < LINES; i++) //输出二进制文本
{
out.write((char*)&BINARY[i], sizeof(BINARY[i]));
}
希望读取到的二进制数据还是255。题主在做随机数,需要用Binary,即每BYTE占用八个BITs
Lines = CountLines(filename);
cout << "文件行数:" << Lines << endl;
// 读取文件行数
int *Bit = new int[Lines];
int i = 0;
while (!file.eof())

{
file >> Bit[i];
i++;
}
file.close();
//读取文本文件数据到数组,关闭文件
for (i = 0; i < Lines; i++)

{
cout << Bit[i]<<endl;
}
delete[]Bit;
cin.get();
//输出数组内容到屏幕
目前,我只是把数据读到一个int数组(Bits)里面了。

5个回答

     ofstream fout("abcd.dat",ios::binary);
    int Bit[2] = {0, 1};
    int Lines = 2;
    for (int i = 0; i < Lines; i++)
    {
    unsigned char ch = static_cast<unsigned char>(Bit[i]);
    fout.write((char  *)&ch, sizeof(unsigned char));
    }
    fout.close();

上面为完整测试代码,题主可参看

u010104813
可夫贺 回复qq_42035758: 已加QQ,请题主贴编译环境和运行截图
大约 2 年之前 回复
qq_42035758
Quantum_107 我按照您的代码,加进去,还是报错。如果可以的话加我QQ:329052927,我会采纳,麻烦了!
大约 2 年之前 回复

c++中采用ifstream ifile("stu.txt")打开源文件,读入数据,再用ofstream ofile("flu.dat",ios::binary)打开二进制文件,使用write(函数写入就可以了)

 ofstream rs("xxx,dat",ios::binary);
for (i = 0; i < Lines; i++)
{
unsigned char ch = (unsigned char)Bit[i];
rs.write((unsigned char *)&ch, sizeof(unsigned char);
}
rs.close();
qq_42035758
Quantum_107 您好,这段代码写进去之后,会提示unsigned char * 类型的实参与 const char * 类型不匹配
大约 2 年之前 回复
 如果要考虑效率,就

unsigned char *Bit = new int[Lines];
int i = 0;
while (!file.eof())
{
int x;
file >> &x;
Bit[i] = (unsigned char)(i % 0x100);
i++;
}
file.close(); 
ofstream rs("xxx,dat",ios::binary);
rs.write((unsigned char *)&Bit, sizeof(unsigned char)*Lines);
rs.close();
qq_42035758
Quantum_107 您好,这段代码中,int x,file >> x; 会 提示没有与这操作数匹配的“>>”运算符,请问怎么解决
大约 2 年之前 回复

ofstream fout("xxxx.dat",ios::binary);
for (i = 0; i < Lines; i++)
{
unsigned char ch = static_cast(Bit[i]);
fout.write((char *)&ch, sizeof(unsigned char));
}
fout.close();

u010104813
可夫贺 回复qq_42035758: 上面static_cast那里应改为static_cast<unsigned char>,写掉了,亲测可行
大约 2 年之前 回复
qq_42035758
Quantum_107 回复u010104813: + Bit 0x00008123 {???} int * + Byte 0x0323f1a8 <字符串中的字符无效。> unsigned char * Byte[i] 205 '?' unsigned char Lines 6 int i 0 int
大约 2 年之前 回复
qq_42035758
Quantum_107 回复u010104813: 您好,编译之后,会报错,引发了未经处理的异常:读取访问权限冲突。 Bit 是 0x1118235
大约 2 年之前 回复
u010104813
可夫贺 static_cast<unsigned char>
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐