3255|5

81

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

大家快帮忙看看我的程序,迷茫中.... [复制链接]

是个读一个.txt文件内容的问题,其中strtxt是文件名字(***.txt)的变量。
代码如下:
void ReadTxt::OnOK()
{
        // TODO: Add extra validation here
        //---------------createfile打开,然后用readfile读取数据----------------//
        HANDLE hFile;
        DWORD dwBytesRead;
        char buff[4096];
        hFile = CreateFile(strtxt,GENERIC_READ,0,NULL,OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL,NULL);
        if(hFile == INVALID_HANDLE_VALUE)
        {
                AfxMessageBox(L"Cound not open the file");
                return;
        }

        if(ReadFile(hFile,buff,4096,&dwBytesRead,NULL))
        {
                CEdit* p = NULL;
                p = (CEdit*)GetDlgItem(IDC_EDIT1);
                GetDlgItem(IDC_EDIT1)->SetWindowText((const unsigned short *)buff);
                GotoDlgCtrl(p);
                free(p);
        }
}
这个,在evc的编辑框控件IDC_EDIT1中就是显示乱码,本来是sdhfos12456这样的一个字符串就显示着方块或不知道什么符号的乱码,很郁闷。
下面是我写的程序的另一个版本,但只能显示txt文件里字符串的第一位。这样的:
void ReadTxt::OnOK()
{
        // TODO: Add extra validation here
        //---------------createfile打开,然后用readfile读取数据----------------//
        HANDLE hFile;
        DWORD dwBytesRead;
        CString str;
        hFile = CreateFile(strtxt,GENERIC_READ,0,NULL,OPEN_EXISTING,
                FILE_ATTRIBUTE_NORMAL,NULL);
        if(hFile == INVALID_HANDLE_VALUE)
        {
                AfxMessageBox(L"Cound not open the file");
                return;
        }

        if(ReadFile(hFile,  (LPSTR)(LPCTSTR)str, 1, &dwBytesRead, NULL))
        {
                CEdit* p = NULL;
                p = (CEdit*)GetDlgItem(IDC_EDIT1);
                GetDlgItem(IDC_EDIT1)->SetWindowText(str);
                GotoDlgCtrl(p);
                free(p);
        }
}这个就能显示asdfhso13546的第一位的a,而把ReadFile的第三个参数改成100等数字却变成了如第一个写法中一样的一行乱码。实在找不到办法全正确显示出来啊
大家帮帮忙,困扰我整整一天了。谢谢大家!!!!

最新回复

首先定义中文数组应该用双字节指针wchar_t,而拷贝函数也不能用strcpy,而应该用:       wchar_t * wcscpy(wchar_t * wDest,wchar_t * wSource);函数,操作如下:        wchar_t s[20];        CString str=“你好”;        wcscpy(s,(LPCTSTR)str); //前面没有转成UNICODE编码,所以这里需要强制转换   多字节和宽字符之间转换的函数:mbstowcs, mbtowc, wcstombs, wctomb.   mbstowcs---Convert a multi-byte(ANSI) string to wide character stirng(Unicode).   wcstombs---Convert a wide character string to multi-byte string.   WCHAR szwcBuffer[100];   char szBuffer[100];   char* lpszConvert = "ANSI String to convert";   WCHAR* lpszwcConvert = _T("Unicode string to convert");   int nChars;   nChars = mbstowcs(szwcBuffer, lpszConvert, 100);   nChars = wcstombs(szBuffer, lpszwcConvert, 100);  详情 回复 发表于 2007-9-4 15:21
点赞 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
从文件里读出来是ASCII码,WinCE下要正确显示,必须转换成UNICODE。
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
超级谢谢!   我试试去!
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
从文件里读出来是ASCII码,WinCE下要正确显示,必须转换成UNICODE。
若还不可以,在试试别的编码.
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

5
 
在网上查ASC2码转UNICODE用mbstowcs,但具体怎用不了解喔,能否给代码,谢谢+谢谢
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

6
 
首先定义中文数组应该用双字节指针wchar_t,而拷贝函数也不能用strcpy,而应该用:       wchar_t * wcscpy(wchar_t * wDest,wchar_t * wSource);函数,操作如下:
       wchar_t s[20];
       CString str=“你好”;
       wcscpy(s,(LPCTSTR)str); //前面没有转成UNICODE编码,所以这里需要强制转换

  多字节和宽字符之间转换的函数:mbstowcs, mbtowc, wcstombs, wctomb.
  mbstowcs---Convert a multi-byte(ANSI) string to wide character stirng(Unicode).
  wcstombs---Convert a wide character string to multi-byte string.
  WCHAR szwcBuffer[100];
  char szBuffer[100];
  char* lpszConvert = "ANSI String to convert";
  WCHAR* lpszwcConvert = _T("Unicode string to convert");
  int nChars;
  nChars = mbstowcs(szwcBuffer, lpszConvert, 100);
  nChars = wcstombs(szBuffer, lpszwcConvert, 100);
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表