C/C++ 二进制文件问题

yuchongjike 2009-06-09 08:51:28
写入文件后用UE打开看,全是0,114个字节.
我要只写入64个字节的~~~~~~~~

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char* argv[])
{
char temp[] = "123";
int mac[9] = {0};
char filename[15] = "memac.bin";
int macc = 0;
FILE *fp;
int i;

strcpy(filename,argv[1]);
for(i=0;i<6;i++)
{
mac[i+2] = strtol(argv[i+2],&temp,16); //这里的mac[i+2]的值为何总是0 ???
}
mac[0] = 0x00;
mac[1] = 0x06;

if((fp = fopen(filename,"wb+")) == NULL)
{
printf("Create file error:%s\n",filename);
return 1;
}

fwrite(mac,sizeof(int),1,fp);
fwrite(macc,sizeof(int),56,fp);
fclose(fp);
return 0;
}
...全文
75 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyond071 2009-06-09
  • 打赏
  • 举报
回复

int main(int argc,char* argv[])
{
char *temp = "123";//strtol的原型是long int strtol(const char *nptr,char **endptr,int base); temp需要是char*型
char mac[9] = {0};//要按字节输出,这里就不能是int,一个int是4个字节!
char filename[15] = "memac.bin";
FILE *fp;
int i;

strcpy(filename,argv[1]);
for(i=0;i<6;i++)
{
mac[i+2] = (char)strtol(argv[i+2],&temp,16);
}
mac[0] = 0x00;
mac[1] = 0x06;

if((fp = fopen(filename,"wb+")) == NULL)
{
printf("Create file error:%s\n",filename);
return 1;
}
fwrite(mac,sizeof(char),8,fp);//输出mac的前8个单元
for(i = 0; i < 56; i++)//输出56个0,可不能用fwrite(macc,sizeof(int),56,fp);请仔细看fwrite的使用说明
{
putc(0, fp);
}
fclose(fp);
return 0;
}
beyond071 2009-06-09
  • 打赏
  • 举报
回复
楼主的目的是否是想将mac中的00 06 12 34 56 78 9A EF 这8个字节输出,并在后面补上56个零?
jkdfjkdf 2009-06-09
  • 打赏
  • 举报
回复
总等于0是因为strtol总是fail
temp赋初值有什么用? 定义一个char *temp就行了, 实际上在这儿没有用到, 放个NULL在strtol里就可以了.
czfnaruto 2009-06-09
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char* argv[])
{
char temp[] = "123";
int mac[9] = {0};
char filename[15] = "memac.bin";
int macc = 0;
FILE *fp;
int i;

strcpy(filename,argv[1]);
for(i=0;i<6;i++)
{
mac[i+2] = strtol(argv[i+2],&temp,16); //这里的mac[i+2]的值为何总是0 ???
}
mac[0] = 0x00;
mac[1] = 0x06;

if((fp = fopen(filename,"wb+")) == NULL)
{
printf("Create file error:%s\n",filename);
return 1;
}

//fwrite(mac,sizeof(int),1,fp);
//fwrite(macc,sizeof(int),56,fp);

fwrite(mac,sizeof(int),8,fp); //改为这样试试

fclose(fp);
return 0;
}



wanggang_0717 2009-06-09
  • 打赏
  • 举报
回复
ding
yuchongjike 2009-06-09
  • 打赏
  • 举报
回复
命令行参数:wmemac.exe memac.bin 12 34 56 78 9A EF
wmemac.exe是这个程序的名字
memac.bin是要写入的文件的名字
后面的参数是要写入的内容

65,210

社区成员

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

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