C++如何把byte*类型保存到文件

useready2 2012-07-04 04:44:06
C++如何把byte*类型保存到文件
byte* pByte = "此处为二进制数据"

如何把pByte保存到本地? 如保存文件名 111.rar
...全文
1130 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-03-31
  • 打赏
  • 举报
回复
引用 5 楼 useready2 的回复:
再问一下 假如一个文件 11.rar //10M大小 用二进制读取这个文件 byte *pByte = "读取的11.rar" 怎么把pByte 按照5M的大小分割成两个文件??
#include <sys\stat.h>
#include <io.h>
#include <fcntl.h>
#include <share.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define MAX_CLU_BYTES 65536
FILE *fo;
int fh;
__int64 offs,offs1;
__int64 rvi64;
int rv,wrv;
unsigned char buf[MAX_CLU_BYTES];
char ofn[_MAX_PATH];
char offstr[80];
void strcpybutcomma(char *t,char *s) {
    char c;

    while (1) {
        c = *s++;
        if (','!=c) *t++ = c;
        if (0==c) break;
    }
}
void main(int argc,char **argv) {
    if (argc<3) {
        printf("Copy File Tail.\n");
        printf("Usage:\n");
        printf("    cft filename.ext offset_begin[-offset_end]\n");
        printf("Copy filename.ext offset_begin[-offset_end] to offset_begin[-offset_end]-filename.ext\n");
        printf("Note: Byte at offset_end is NOT included.\n");
        printf("Example:\n");
        printf("    cft abc.rar 12345\n");
        printf("Copy abc.rar offset 12345-end to 12345-abc.rar\n");
        printf("    cft abc.rar 123-12345\n");
        printf("Copy abc.rar offset 123-12345 to 123-12345-abc.rar\n");
        printf("    cft abc.rar 0xAB-0xCD\n");
        printf("Copy abc.rar offset 0xAB-0xCD to 0xAB-0xCD-abc.rar\n");
        return;
    }
    strcpybutcomma(offstr,argv[2]);
    rv=sscanf(offstr,"%I64i-%I64i",&offs,&offs1);
    if (rv==0) {
        printf("offset %s is not number\n",argv[2]);
        return;
    }
    fh=_sopen(argv[1],_O_BINARY|_O_RDONLY|_O_RANDOM,_SH_DENYNO);
    if (fh==-1) {
        printf("_sopen %s errno=%d\n",argv[1],errno);
        return;
    }
    if (rv==1) {
        offs1=_filelengthi64(fh);
        if (offs1==-1i64) {
            printf("%I64=_filelengthi64 errno=%d\n",offs1,errno);
            _close(fh);
            return;
        }
    } else {//rv==2
        if (offs1<offs) {
            printf("%s offset_begin>offset_end error\n",argv[2]);
            _close(fh);
            return;
        }
    }
    rvi64=_lseeki64(fh,offs,SEEK_SET);
    if (rvi64!=offs) {
        printf("%I64u=_lseeki64 %I64u errno=%d\n",rvi64,offs,errno);
        _close(fh);
        return;
    }
    sprintf(ofn,"%s-",offstr);
    strcat(ofn,argv[1]);
    fo=fopen(ofn,"wb");
    if (fo==NULL) {
        _close(fh);
        printf("fopen %s error\n",ofn);
        return;
    }
    cprintf("\n%I64u\r",offs);
    while (1) {
        rv=_read(fh,buf,(unsigned int)__min(offs1-offs,MAX_CLU_BYTES));
        if (rv==0) break;//
        if (rv<0) {
            fclose(fo);
            _close(fh);
            printf("_read %s offset %I64u error\n",argv[1],offs);
            return;
        }
        wrv=fwrite(buf,1,rv,fo);
        if (wrv!=rv) {
            fclose(fo);
            _close(fh);
            printf("fwrite %s error\n",ofn);
            return;
        } else {
            offs+=rv;
            cprintf("%I64u\r",offs);
            if (offs>=offs1) break;//
        }
    }
    fclose(fo);
    _close(fh);
    printf("Copy %s offset %s to %s OK.\n",argv[1],argv[2],ofn);
}
yuanmushen 2014-03-31
  • 打赏
  • 举报
回复
ifstream inputFile("111.rar", ios:binary); inputFile<<pByte;
lm_whales 2014-03-26
  • 打赏
  • 举报
回复
简单分割,读5M写入一个文件即可 如果需要安排自解压,那就用,winrar 自己处理即可。 可以分卷压缩
dengxinggui 2014-03-25
  • 打赏
  • 举报
回复
useready2 2012-07-04
  • 打赏
  • 举报
回复
再问一下
假如一个文件 11.rar //10M大小
用二进制读取这个文件
byte *pByte = "读取的11.rar"
怎么把pByte 按照5M的大小分割成两个文件??
xuanxuangeng 2012-07-04
  • 打赏
  • 举报
回复
因为是二进制数据,不能使用strlen来计算数据的长度(strlen遇到'\0'退出),否则计算出来的一般都不对。因此在你需要在读入buffer或者下载数据的时候保存buffer的长度,然后以二进制格式写文件。
赵4老师 2012-07-04
  • 打赏
  • 举报
回复
fwrite(pByte,1,strlen((const char *)pByte),f);
useready2 2012-07-04
  • 打赏
  • 举报
回复
error C2664: "strlen": 不能将参数 1 从"byte *"转换成"const char *"
赵4老师 2012-07-04
  • 打赏
  • 举报
回复
typedef unsigned char byte;
byte* pByte = "此处为二进制数据";
FILE *f;
f=fopen("111.txt","wb");
fwrite(pByte,1,strlen(pByte),f);
fclose(f);
system("c:\\progra~1\\rar m 111.rar 111.txt");

64,649

社区成员

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

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