关于txt文件的读取

莎莎 2011-04-26 05:30:42

#include "stdafx.h"
#include <afx.h>
#include <iostream.h>

int main(int argc, char* argv[])
{
CFile file;
file.Open(_T("C:\\Documents and Settings\\Administrator\\桌面\\text.txt"),
CFile::modeReadWrite); //打开txt文档,文档里面存的是数字

char pszData[32] = {0};

int nCount = file.Read(pszData,sizeof(pszData));

cout<<nCount<<endl;

CString str;
str.Format("%d, %d, %d, %d", pszData[0], pszData[1], pszData[2], pszData[3]);
cout<<str<<endl;

str.Format("%x, %x, %x, %x", pszData[0], pszData[1], pszData[2], pszData[3]);
cout<<str<<endl;

return 0;
}

为什么得到的数据不是实际的呢?
...全文
3927 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
vichord 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wangshasha19890306 的回复:]

引用 15 楼 king_hhuang 的回复:
你通过文本查看的是字符,实际记录的是它的ASCII码
所以你Read到的也是ASCII码


如果这样的话,1就应该是49,而不是31,不是ASCII码
[/Quote]

1的ASCII 码是31,For Hexadecimal.........
red-fly 2011-05-04
  • 打赏
  • 举报
回复
简单地说,可以先按照字符串来读,就像楼主贴的那样子,然后再把它们转换成数字就行了
莎莎 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 hyhtemple 的回复:]
CString str;
str.Format("%d, %d, %d, %d", pszData[0], pszData[1], pszData[2], pszData[3]);
cout<<str<<endl;
这是ASCII char -> AscII十进制数

CString str;
str.Format("%c, %c, %c, %c", pszData[0], pszDa……
[/Quote]

恩,我现在弄明白了,开始碰到这个问题的时候是有点没弄清楚,呵呵
莎莎 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 sdfabc027 的回复:]
看了你的程序,首要的问题是这一句
int nCount = file.Read(pszData,sizeof(pszData));
这里sizeof(pszData)应该返回是4,也就是4个字节的意思。因为pszData实质上是一个32位的指针。
另外还要考虑字符编码是unicode还是多字节编码。

想要了解更多的信息参考MSDN CStringT().
[/Quote]

char pszData[32];
所以sizeof(pszData)的值是32,在这里不退化为指针
如果你觉得我说的不是,你可以上机运行一下,结果就是32
莎莎 2011-05-03
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 deping_chen 的回复:]
%d对应int,你传入char明显是错误的.
自己学习一下printf的用法吧.
[/Quote]

没有错,输出对应的ASCII码值
networkwx 2011-05-03
  • 打赏
  • 举报
回复
file.Read(pszData,sizeof(pszData));不是直接把数字读进来吧。。。
c157xigua 2011-05-03
  • 打赏
  • 举报
回复
结果是对的。如果要输出数字,可用%c,%d输出的数值。
hyhtemple 2011-05-02
  • 打赏
  • 举报
回复
CString str;
str.Format("%d, %d, %d, %d", pszData[0], pszData[1], pszData[2], pszData[3]);
cout<<str<<endl;
这是ASCII char -> AscII十进制数

CString str;
str.Format("%c, %c, %c, %c", pszData[0], pszData[1], pszData[2], pszData[3]);
cout<<str<<endl;
这是ASCII char

是对的没有问题,是你用的格式输出符有问题!!
sdfabc027 2011-05-02
  • 打赏
  • 举报
回复
看了你的程序,首要的问题是这一句
int nCount = file.Read(pszData,sizeof(pszData));
这里sizeof(pszData)应该返回是4,也就是4个字节的意思。因为pszData实质上是一个32位的指针。
另外还要考虑字符编码是unicode还是多字节编码。

想要了解更多的信息参考MSDN CStringT().
deping_chen 2011-04-29
  • 打赏
  • 举报
回复
%d对应int,你传入char明显是错误的.
自己学习一下printf的用法吧.
home2001me 2011-04-29
  • 打赏
  • 举报
回复
看了回答才知道CSDN上的高手真多呀。不过高手都得加上引号的。哎,不能想明白了再上来回答吗?
Utopiaaaa 2011-04-28
  • 打赏
  • 举报
回复

没分了!!
Utopiaaaa 2011-04-28
  • 打赏
  • 举报
回复
请看下面代码:

#define _AFXDLL
#include <afxwin.h> //控制台使用CString
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
CFile file;
file.Open(_T("C:\\Documents and Settings\\Administrator\\桌面\\text.txt"),
CFile::modeReadWrite); //打开txt文档,文档里面存的是数字

char pszData[32] = {0};

int nCount = file.Read(pszData,sizeof(pszData));

CString str;
//pszData[0],pszData[1]..本身为字符 所以格式字符串用%c
str.Format("%c, %c, %c, %c", pszData[0], pszData[1], pszData[2], pszData[3]);
//或str.Format("%d, %d, %d, %d", pszData[0]-48, pszData[1]-48, pszData[2]-48, pszData[3]-48);
cout<<str<<endl;

//例如 字符 '1' - 48 == 1
str.Format("%x, %x, %x, %x", pszData[0]-48, pszData[1]-48, pszData[2]-48, pszData[3]-48);
cout<<str<<endl;

return 0;
}


莎莎 2011-04-27
  • 打赏
  • 举报
回复
感谢各位,我明白了,1的ASCI码就是49,然后49在16进制下就是31,所以输出0x31是正确的~~~
以后还是希望大家多多帮忙,谢谢
qwd100815 2011-04-27
  • 打赏
  • 举报
回复
读txt文件的话,用CStdioFile::ReadString
JJF 2011-04-26
  • 打赏
  • 举报
回复
或许要注意ASCI码与数值的转换吧
沉默的光影 2011-04-26
  • 打赏
  • 举报
回复
如果是一行一行地读,可以使用ReadString函数啊
Scorpiour 2011-04-26
  • 打赏
  • 举报
回复
我前两天也是在用CFile读取数据时遇到各种错误,这里是我的解决方案希望能帮到你


//使用CStdioFile读取文件
//不要忘记 #include "afx.h"

typedef unsigned int UINT;

UINT ReadData(bool ErrFlag=false)
{
CString TmpCStr;
CStdioFile File;

File.Open(DataFileName,CFile::modeRead);

File.ReadString(TmpCStr); //将整个数据一次性读入

wchar_t pszData[32]={0}; //初始化,使用wchar_t而不是char

for(int i=0;i<32;i++) //从读入的全部数据中找出自己想要的部分就可以了。。。。
{
pszData[i]=TmpCStr.GetAt(i);
}

//....

return -1;
}
Liekkas 2011-04-26
  • 打赏
  • 举报
回复
str[i].Format("%d", pszData[i]);这个地方改成这样- -
Liekkas 2011-04-26
  • 打赏
  • 举报
回复
int main(int argc, char* argv[])
{
CFile file;
file.Open(_T("C:\\Documents and Settings\\Administrator\\桌面\\text.txt"),
CFile::modeReadWrite); //打开txt文档,文档里面存的是数字

char pszData[32] = {0};

for(int i=0;i<32;i++)
file.Read(&pszData,sizeof(pszData));


CString str[4];

for( i=0;i<4;i++)
{
str[i].Format("%d, %d, %d, %d", pszData[0], pszData[1], pszData[2], pszData[3]);
cout<<str[i]<<endl;
}

for( i=0;i<4;i++)
{
str[i].Format("%x, %x, %x, %x", pszData[0], pszData[1], pszData[2], pszData[3]);
cout<<str[i]<<endl;
}
return 0;
}

你再试试,在Win32中没有CFile和CString这些类,Format也不能用,只能在MFC中使用
加载更多回复(17)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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