[求助]C++中 文件与二进制能否互相转换

舒望星 2015-05-24 06:46:58
找了一些资料 将读到的文件转换成二进制(不知道如何验证是否正确,假设正确的话) 能否将得到的二进制 再转换成文件


这个是现在用的转换成二进制的代码 但是 当然想把这个用write ,fwrite的时候 都是将二进制 当成文本来复制进去的 并没有转换成源文件 不知道是否可以这样转换


bool copyFile()
{
char *sourceFileName = "E:\\test.jpg";


//源文件
std::ifstream sourceFile;


sourceFile.open(sourceFileName, std::ios::binary);
if (sourceFile.fail())
{
std::cout << "打开文件失败" << std::endl;
sourceFile.close();
return false;
}


FILE *file;
fopen_s(&file, "E:\\22.jpg", "w");

char c[16];
while (!sourceFile.eof())
{
sourceFile.read(c, 16);
if (!sourceFile.eof())
{
for (int i = 0; i < 16; ++i)
{
int decimal = int((unsigned char)(c[i]));
char binary[255];
_itoa_s(decimal, binary, 2);
fwrite(binary, sizeof(binary), sizeof(binary), file);
}
}
}

return true;
}
...全文
129 3 打赏 收藏 转发到动态 举报
写回复
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
舒望星 2015-05-27
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
已经找到方法了 谢谢关注
赵4老师 2015-05-25
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
赵4老师 2015-05-25
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <string.h>
#include <conio.h>
FILE *fi,*fo;
unsigned int n;
int c;
//-------------------------------------------------------
void main(int argc,char *argv[])
{
    if (argc<3) {
        cprintf("Bin2Hex srcfile desfile");
        return;
    }
    if ((fi=fopen(argv[1],"rb"))==NULL) {
        cprintf("Can not find file %s",argv[1]);
        return;
    }
    if ((fo=fopen(argv[2],"w"))==NULL) {
        fclose(fi);
        cprintf("Can not create file %s",argv[2]);
        return;
    }
    n=0;
    while (1) {
        c=fgetc(fi);
        if (EOF==c) break;
        n++;
        if (1==n)        fprintf(fo,  "0x%02X",c);
        else {
            if (1==n%16) fprintf(fo,"\n0x%02X",c);
            else         fprintf(fo, ",0x%02X",c);
        }
    }
    fcloseall();
    cprintf("OK to Bin2Hex %u bytes.",n);
}
#include <stdio.h>
#include <string.h>
#include <conio.h>
FILE *fi,*fo;
int r;
unsigned int n,c;
long offset;
//-------------------------------------------------------
void main(int argc,char *argv[])
{
    if (argc<3) {
        cprintf("Hex2Bin srcfile desfile");
        return;
    }
    if ((fi=fopen(argv[1],"rb"))==NULL) {
        cprintf("Can not find file %s",argv[1]);
        return;
    }
    if ((fo=fopen(argv[2],"wb"))==NULL) {
        fclose(fi);
        cprintf("Can not create file %s",argv[2]);
        return;
    }
    n=0;
    while (1) {
        offset=ftell(fi);
        r=fscanf(fi,"%2x",&c);
        if (EOF==r) break;//
        if (1==r) {
            fputc(c,fo);
            n++;
        } else {//0==r
            fseek(fi,offset,SEEK_SET);//因为VC6的Release版及其VC7,8,9,10,...版的fscanf未按约定保持offset不变,所以此处必须恢复offset
            r=fgetc(fi);
            if (EOF==r) break;//
        }
    }
    fcloseall();
    cprintf("OK to Hex2Bin %d bytes.",n);
}
相关推荐

3,879

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告