大家帮帮忙,用二进制打开文件,用BYTE数组读取数据是为了防止出现0x00吗,用char数组碰到文件里面的0x00会把他当成结束符吗?

zwd602 2010-12-19 11:33:49
用二进制打开文件,用BYTE数组读取数据是为了防止出现0x00吗,用char数组碰到文件里面的0x00会把他当成结束符吗?
部分代码如下:
CFile file;
struct FILE_MSG filemsg;//结构变量
CFileDialog filedlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"|All Files(*.*)|*.*||",NULL);
if(filedlg.DoModal()==IDOK)
{
//以二进制和只读方式打开文件
filemsg.sFilepath=filedlg.GetPathName();
if(file.Open(filemsg.sFilepath,CFile::modeRead|CFile::typeBinary)==0)
{
AfxMessageBox("文件打开失败");
return;
}
filemsg.iFilesize=file.GetLength();
第一种方法://将读入的数据存到char 数组buffer
char* buffer=new char(filemsg.iFilesize);
//按文件实际大小建立缓冲区
file.Read(buffer,filemsg.iFilesize);
BYTE* cmd=new BYTE(iStrlen+1);
memset(cmd,'\0', iStrlen+1);
for(int i=0;i<iStrlen;i++)
{
cmd[i]=msg.at(i);
}
cmd[i]='\0';
第二种方法://将读入的数据存到byte数组cmd
BYTE* cmd=new BYTE(iStrlen+1);
memset(cmd,'\0', iStrlen+1);
file.Read(cmd,filemsg.iFilesize);
我写的程序是要求pc服务器端通过无线网络发送数据到无线通信模块MC55,MC55当读到0x00的时候让它以NULL显示,而不是把它当成是结束符,因为程序需要,想问一下第一种方法可以吗
...全文
262 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2010-12-19
  • 打赏
  • 举报
回复
既然你二进制读文件,就注定你要用二进制来处理这些数据.

与是否'\0'有关么? '\0'在二进制看来也不过是0x00,读进去就读进去了,二进制读取文件又不是以'\0'终结的.

读写只要统一就没问题,瞎搞没法解释.
zwd602 2010-12-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luciferisnotsatan 的回复:]

BYTE就是unsigned char

只有在遇到和字符串相关的地方,\0才作为结束符。
[/Quote]
BYTE我知道是unsigned char,我的意思是用我的第一种方法的话,我先把文件用二进制打开,然后分配一个动态的char数组,那会不会出现这样的情况,就是我在读二进制文件的时候,碰到了0x00的话,char数组会不会把它当做是结束符,把文件后面的数据给屏蔽了呢
luciferisnotsatan 2010-12-19
  • 打赏
  • 举报
回复
BYTE就是unsigned char

只有在遇到和字符串相关的地方,\0才作为结束符。
arong1234 2010-12-19
  • 打赏
  • 举报
回复
所谓的二进制打开方式和文本方式唯一的区别在于:后者会把\r\n转换为\n,而前者不会
arong1234 2010-12-19
  • 打赏
  • 举报
回复
无论哪种读法都不会因为\0发生什么丢弃数据的问题,你丢数据是因为你读完后当字符串处理(如放入CString,使用strlen等)导致的
zwd602 2010-12-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qq120848369 的回复:]

既然你二进制读文件,就注定你要用二进制来处理这些数据.

与是否'\0'有关么? '\0'在二进制看来也不过是0x00,读进去就读进去了,二进制读取文件又不是以'\0'终结的.

读写只要统一就没问题,瞎搞没法解释.
[/Quote]
你可以针对我上面的问题具体提一下该怎么做吗,我也不想瞎搞,我刚学编程没多久,所以还请高手多指点一下,谢谢了

64,664

社区成员

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

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