CFile::Read()的问题

请教一个CFile::Read()的问题

一个文件内容十六进制为:
38 42 43 42 00 01 0B B8 00 00 00 23 00 24 00 24 ......

我要从中读取6字节的数据

CFile file;
.....
struct
{
short a;//short为2字节
short b;
short c;
}abc;//这个结构体大小6字节

file.Read(&abc,6);//从文件开头读取6字节数据
我预期的结果是 a=0x3842,b=0x4342,c=0x0001;

可是实际的结果是a=0x4238,b=0x4243,c=0x0100

a和b的值2个字节颠倒过来了,(看 a的 38 42 变成了42 38),请问这是怎么回事,要如何解决
不是这个问题,我csdn上问了下,自己也验证了一下,是这样的

因为,x86的内存单元是倒序的……用过汇编就很清楚,比如1这个整数,内存里是01 00 00 00,而不是00 00 00 01

struct里的顺序是不能反映a,b,c的地址顺序的

要实现你说的功能可以用数组

也就是

short a[3];
File.Read(&a,6)

这样a[0],a[1],a[2]就可所需要的读进来

不是吧,x86显然存储的时候,是地位在低地址,高位在高地址啊,汇编我是学过的。不知道谁跟你那样说的
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-05-02
PC系统就是这样的, 内存里低位字节在前,高位字节在后。 所以一个short如果内存里的顺序是 38 42 那么实际上它就等于 0x4238

如果你确信写入系统是采用高字节在前的约定,有一些宏可以调整这个
去查查msdn吧, 查这个 ntohs

CFile::Read()函数的问题
Read只是向PString指向的地址的连续9个字节的空间内存储读到的数据,并不管你为这个指针分配了多少空间!是可以读取字符的,而且在显示字符串时是以'\\0'作为字符串结束标志的,同样也是不管这个char的指针分配了多大的空间,所以也是可以正常显示的。但是,在一个程序中还有其他很多变量的,而其他变量的地...

为什么我在MFC中调用 CFile::Read() 时 读到的值比实际内容多了很多空...
两种可能:1、你的文件中可能有空格换行,tab等空白字符。2、你的显示代码在遇到0后没结束。

为什么用CFile::Read()读出中文都是乱码?
1.设置字符集,读取的时候好处理中文 2.可能对于空格等自动截取了 3.一个是UNICODE字符串,一个是ANSI字符串,两者之间需要编码转换 ---解决方案--- C\/C++ codeCFile file(L"c:\\\\test.txt",CFile::modeRead);char *pBuf;int iLen=file.GetLength();pBuf=new char[iLen+1];file.Read(pBuf,...

MFC中CFile::Read抛出异常,错误码5(access denied)
你这个代码的逻辑判断有问题,!CFile::Open 是打开失败的情况,这种情况应该出错误提示,并进行错误处理和退出函数。只有在相反的情况下才能进行文件读取。if (!fImage.Open(szFullFileName, CFile::readOnly|CFile::shareDenyRead)){\/\/打开失败了AfxMessageBox("xxx");\/\/处理打开失败情况}else{ fIma...

CFile::Read()怎么用,MFC中。。。
CFile::Open成功打开文件后,使用 GetLength 获取文件的长度,nFileLen;然后 new 一块内存。char*lpBuf = new char[nFileLen];再使用 Read( lpBuf, nFileLen);文件的数据就装入到 lpBuf指向的内存块了。Read是从当前游标开始读取,默认是文件起始,可以使用 Seek\/ SeekToBegin \/ SeekToEnd 来定位。“...

CFile Read(),当一次读不完文件数据的时候,下次再读,怎么就知道接着上次...
读文件是有个文件指针,调用Read时文件指针制动向前移动,下次再调用是是接着上次文件指针读。

CFile read 为什么不能读出全部内容
read函数是有限制的,最大不能超过某个值,你可以试试,最好是进行循环读取,循环读取的方式:先获取文件长度,然后循环读取某一指定长度,直到读取完成。

探讨一下CFile::Read函数的用法?
CString变量不是指针,&CString是地址,可以赋值给指针,但和Read函数的参数类型不匹配。而CString::GetBuffer()函数的返回值类型是char*,进行转换后(void*),就与参数类型匹配,所以可以。从这个问题可以看出的基础知识还不够牢固,对指针的概念还很模糊。CString* pstr ;pstr是CString*类型的指针,而...

用了CFile::Read()后读不到数据到指定变量里
Read(cRec,CrecFile.GetLength());CString m_Record;(我假想你这个变量是这么定义的)m_Record += cRec;GetDlgItem(IDC_RECORD)->SetWindowText(m_Record);msdn 的例子 Example \/\/example for CFile::Read extern CFile cfile;char pbuf[100];UINT nBytesRead = cfile.Read( pbuf, 100 );

CFile的Read函数参数怎么设?
CString strText;cfile.Read( strText.GetBuffer( 100 ), 100 );strText.ReleaseBuffer();把strText的值送到文本框就行了,

相似回答
大家正在搜