在vc或者c中要读取二进制和字符串的混合文件,用fread时候遇到1A就不读了,为什么?有什么别的方法可以实现读取?谢谢 你把代码放上。。哪有什么别的方法,只有Read和fread能读二进制。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void ReadFile(){ FILE *fp = fopen(m_sFileName.c_str(),"r"); if(!fp) { cout<<"open file failed!\n"; return false; } const int bufferSize = 256; char buffer[bufferSize]; fgets(buffer,bufferSize,fp); if (buffer[0] != 'P' || buffer[1] != '5')//"P5" { cout<<"This is not a PGM file!\n"; return false; } do{ fgets(buffer, 70, fp); }while(buffer[0] == '#'); /* skip all comment lines */ sscanf(buffer, "%d %d",&m_nWidth,&m_nHeight); //width and height fgets(buffer,bufferSize,fp); sscanf(buffer, "%d",&m_nMaxValue); //max value (In general it is equal to 255) m_bPData = new BYTE[m_nWidth*m_nHeight]; //allocate memory for image data // m_bPData = new unsigned short[m_nWidth*m_nHeight]; //allocate memory for image data if(!m_bPData) { cout<<"allocate memory failed\n"; return false; } int count =0; count = fread(m_bPData,1,m_nWidth*m_nHeight,fp);//sizeof(BYTE) fclose(fp); return true;}这是我看到的一段代码,是对pgm文件的读取.但是发现读时候遇到1A就不再读取.不知道有什么方法可以把文件全部读入?非常感谢yubsh的光临. 用fget函数读取?fget函数遇到回车会有问题的,查查fget函数的用法吧,或者换用fread函数 二进制要用rb或r+b方式打开读 这个程序只是 count = fread(m_bPData,1,m_nWidth*m_nHeight,fp);//sizeof(BYTE) 这句有问题我看了二进制码,发现是遇到1A后就停止读取了.不知道为什么.谢谢各位的回复. 看看是否这个原因http://topic.csdn.net/t/20040719/09/3187125.html#另,PGM文件应该有固定的格式和结构,LZ要分析一下文件结构,按结构读。http://blog.csdn.net/gamer_gerald/archive/2007/06/17/1655756.aspx 3楼和4楼的观点都是正确的。读二进制文件,必须用rb之类的方式打开,而且不能用fgets,fscanf等函数。就你的程序来说,只有fread一个函数能用。你弄乱了文本与二进制文件的区别,遇到不可预料的问题,是情理之中。 谢谢各位的回复.我主要是为了把16位pgm转换成bmp文件.现在还没有解决问题. FILE *fp = fopen(m_sFileName.c_str(), "r "); "r"改为"rb".然后全部都用fread(pData,1,sizeof(^),fp)读数据试试看! 如何将mxArray信息导入C++的double型二维数组 ★★菜鸟请教:如何打包VC程序到一个exe文件?★★ ultraedit 查看doc时是看的doc中的明文吗?谢谢! ######如何连接 sql 数据库 用非数据源的 无法发出数据 简单的问题,我弄不明白了,帮忙! vc中制作的DLL 为什么在VB中不能用??? 极菜问题(在线给分) 难倒大虾:CComBSTR 的问题 尤抱琵琶半遮脸(大送分) 请问:win32生成的dll和ATl生成的com dll有什么区别? 如何卸载 vc sp6?
{
FILE *fp = fopen(m_sFileName.c_str(),"r");
if(!fp)
{
cout<<"open file failed!\n";
return false;
}
const int bufferSize = 256;
char buffer[bufferSize];
fgets(buffer,bufferSize,fp);
if (buffer[0] != 'P' || buffer[1] != '5')//"P5"
{
cout<<"This is not a PGM file!\n";
return false;
}
do{ fgets(buffer, 70, fp); }while(buffer[0] == '#'); /* skip all comment lines */
sscanf(buffer, "%d %d",&m_nWidth,&m_nHeight); //width and height fgets(buffer,bufferSize,fp);
sscanf(buffer, "%d",&m_nMaxValue); //max value (In general it is equal to 255)
m_bPData = new BYTE[m_nWidth*m_nHeight]; //allocate memory for image data
// m_bPData = new unsigned short[m_nWidth*m_nHeight]; //allocate memory for image data
if(!m_bPData)
{
cout<<"allocate memory failed\n";
return false;
} int count =0;
count = fread(m_bPData,1,m_nWidth*m_nHeight,fp);//sizeof(BYTE)
fclose(fp);
return true;
}这是我看到的一段代码,是对pgm文件的读取.但是发现读时候遇到1A就不再读取.不知道有什么方法可以把文件全部读入?
非常感谢yubsh的光临.
count = fread(m_bPData,1,m_nWidth*m_nHeight,fp);//sizeof(BYTE)
这句有问题
我看了二进制码,发现是遇到1A后就停止读取了.不知道为什么.谢谢各位的回复.
http://topic.csdn.net/t/20040719/09/3187125.html#
另,PGM文件应该有固定的格式和结构,LZ要分析一下文件结构,按结构读。
http://blog.csdn.net/gamer_gerald/archive/2007/06/17/1655756.aspx
我主要是为了把16位pgm转换成bmp文件.
现在还没有解决问题.
然后全部都用fread(pData,1,sizeof(^),fp)读数据试试看!