#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;
}为什么得到的数据不是实际的呢?
我想把他们读出来,然后用十六进制输出,如果是CString对象的话,如何判断呢??
|OFN_OVERWRITEPROMPT,_T("文本文档(*.txt)|*.txt|头文件(*.h)|*.h|源文件(*.c;*.cpp)|*.c;*.cpp|数据库文件(*.sql)|*.sql|All Files(*.*)|*.*||"));
if ( dlg.DoModal()!=IDOK ) return;
CString sFileName=dlg.GetPathName();
//打开文件
CStdioFile out;
out.Open(sFileName, CFile::modeRead);
CString sSql,s;
sSql="";
//读取文件
do{
out.ReadString(s);
sSql=sSql+s+(char)10;
}
while (out.GetPosition()!=out.GetLength());
out.Close();
既,得整体读一个int,而不是按byte读
int_file.write(pBuffer, fieldInfo->m_lSize +1);
int_file.close();
m_Web.Navigate(_T("D:\\") + strPath +_T(".pdf"), NULL, NULL, NULL, NULL);参考下吧。
00A61A0C 31 32 33 34 35 36 37 1234567
00A61A13 38 39 00 CD CD CD CD 89.屯屯现在的问题是,里面的每一位前面都多出来一个3,不知道什么情况···
vector<string> vStr; while( !infile.eof() )
{
getline(infile, strline);
vStr.push_back(strline));
}
for( size_t i = 0; i < vStr.size(); i++ )
{
istringstream istr(vStr[i]);
int i1, i2, i3, i4;
istr>>i1>>i2>>i3>>i4; CString str; str.Format("%d, %d, %d, %d", i1, i2, i3, i4);
cout<<str<<endl; str.Format("%x, %x, %x, %x", i1, i2, i3, i4);
cout<<str<<endl;
}
如果txt里面的是2 ,那么读出来的数字就是 32(16进制)
所以你Read到的也是ASCII码
如果这样的话,1就应该是49,而不是31,不是ASCII码
{
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中使用
//使用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;
}
以后还是希望大家多多帮忙,谢谢
#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;
}
自己学习一下printf的用法吧.
int nCount = file.Read(pszData,sizeof(pszData));
这里sizeof(pszData)应该返回是4,也就是4个字节的意思。因为pszData实质上是一个32位的指针。
另外还要考虑字符编码是unicode还是多字节编码。想要了解更多的信息参考MSDN CStringT().
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是对的没有问题,是你用的格式输出符有问题!!
没有错,输出对应的ASCII码值
char pszData[32];
所以sizeof(pszData)的值是32,在这里不退化为指针
如果你觉得我说的不是,你可以上机运行一下,结果就是32
1的ASCII 码是31,For Hexadecimal.........