高分求帮忙啊,把文件转为byte数组

happyday1799 2013-09-18 02:38:08
想把文件转换为byte数组,为什么给char *data数组赋值了,最后长度却只有3,求救!!


FILE *in,*out;
in=fopen(filename,"rb");

int filesize = filelength(fileno(in));
char *data;
data = new char[filesize];

char ch;
int count=0;
ch=fgetc(in);
while(!feof(in))
{
data[count] = ch;
count++;
ch=fgetc(in);
if(i==length)
i=0;
}

fclose(in);
...全文
167 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
happyday1799 2013-09-18
  • 打赏
  • 举报
回复
还是把帖子结了吧,这个方法我知道的,我想要的不是这个答案,我上面的代码是正确的,感谢两位回答。
max_min_ 2013-09-18
  • 打赏
  • 举报
回复
引用 楼主 happyday1799 的回复:
想把文件转换为byte数组,为什么给char *data数组赋值了,最后长度却只有3,求救!!

   FILE *in,*out;
   in=fopen(filename,"rb");

   int filesize = filelength(fileno(in));
   char *data;
   data = new char[filesize];

    char ch;
    int count=0;
    ch=fgetc(in);
    while(!feof(in))
    {
     data[count] = ch;
     count++;
     ch=fgetc(in);
     if(i==length)
      i=0;
    }

    fclose(in);
不用转换的啊, 直接

fread(data, filesize,1, in );
赵4老师 2013-09-18
  • 打赏
  • 举报
回复
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息…… 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
赵4老师 2013-09-18
  • 打赏
  • 举报
回复
引用 4 楼 happyday1799 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] 我不想输出文件,就是想把文件放在一个byte数组里,然后再做处理。
fread
max_min_ 2013-09-18
  • 打赏
  • 举报
回复
直接读出来,用char*date 保存就好了阿, 瞎折腾什么?
happyday1799 2013-09-18
  • 打赏
  • 举报
回复
[quote=引用 1 楼 zhao4zhong1 的回复:] 我不想输出文件,就是想把文件放在一个byte数组里,然后再做处理。
赵4老师 2013-09-18
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
赵4老师 2013-09-18
  • 打赏
  • 举报
回复
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
 if (条件1) break;
 //...
 if (条件2) continue;
 //...
 if (条件3) return;
 //...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
whlie (!feof(f)) {
 a=fgetc(f);
 //...
 b=fgetc(f);//可能此时已经feof了!
 //...
}
而这样写就没有问题:
whlie (1) {
 a=fgetc(f);
 if (feof(f)) break;
 //...
 b=fgetc(f);
 if (feof(f)) break;
 //...
}
类似的例子还可以举很多。
赵4老师 2013-09-18
  • 打赏
  • 举报
回复
仅供参考
#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);
}

65,186

社区成员

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

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