CString与Char*的转换,以及中文字符写入文件,文件的读写等
来源:互联网 发布:石鑫网络信息有限公司 编辑:程序博客网 时间:2024/06/06 08:25
工作需要,碰到多个文件读取和类型转换的问题,记录下来。
ps:都是网上搜集来的,只是查的太多,找不到具体链接了,只好不列出处。再次感谢!
1、CString与char*的转换
分两种情况,一种是工程设置的是不使用Unicode编码,这样的比较简单,用(LPSTR)(LPCTSTR)str 这样的就可以。另一种是使用Unicode编码,这样就比较麻烦,具体原理没去搞,能使用就行。
这样情况下,使用如下办法:
CString fileName;
char buf[1024] = {'\0'}; WideCharToMultiByte(CP_ACP,0,fileName.GetBuffer(0),fileName.GetLength(),buf,1024,0,0);
然后就转成了char*的buf了
2、CString与Tchar的转换
CString str;
Tchar* name[30];
lstrcpy(name, str.GetBuffer(str.GetLength()));
str.ReleaseBuffer();
注意使用了GetBuffer,要用ReleaseBuffer!
或者:
TCHAR* file[300] = L"";
CString str;
_tcscpy_s(file,str);
3、汉字字符保存到文件
好像是因为Unicode的原因, 汉字的2字符,英文是1字符,所以汉字字符直接保存就成乱码了。
有人提供了一个即能保存汉字的也能保存英文的,试了一下,很不错,如下:
bool writeTextToFile(CString strText,FILE *pFile)
{
if(strText!=_T(""))
{
// strText=_T("如果是中文呢?");
int len=strText.GetLength();
char g_str[256];
if(((unsigned char)strText[0])> 128)
{ //chinese中文
setlocale(0,"chs");
_ftprintf(pFile,_T("%s"),(LPCTSTR)strText);
fprintf_s(pFile,"\n");
}
else
{//英文
for(int m=0;m<len;m++)
{
g_str[m]=strText[m];
}
g_str[len+1]='\0';
fwrite(g_str,sizeof(char)*len,1,pFile);
fprintf_s(pFile,"\n");
}
}
else
{
return false;
}
return true;
}
//////////////////////////////////////PS//////////////////////////////////
上面的似乎有问题!!
在Unicode编码下,可以这么读写
CString str = _T("史蒂芬-dfew-而我认为");
int ll = str.GetLength();
int dataLength = 1574646343;
#define char_width 2
int char_length = sizeof(TCHAR);
FILE* fp = fopen("1","wb");
fwrite(str.GetBuffer(0),1,ll*char_width + char_width,fp);
fwrite(&dataLength,1,sizeof(int),fp);
fclose(fp);
fp = fopen("1","rb");
TCHAR buf[1024];
int ddddd = 0;
fread(buf,1,(ll+1)*char_width,fp);
fread(&ddddd,1,sizeof(int),fp);
fclose(fp);
CString ss;
ss.Format(L"%s",buf);
4、文件结尾的判断问题
可参考http://blog.csdn.net/bingqing07/article/details/5785080的说明,已经明确了
我自己实际碰到的情况是:
我的二进制流文件,必须明确知道每一位存储的内容是什么,里面有汉字、数字、图像像素值等,读错一位就全错了。而且,我是用一个switch来判断具体要读什么,读多少的。
一开始我用feof来判断是否结束,可是调试的时候总是发现,按理到了文件尾,可还是要进switch一次,导致错误。看了上面的链接才明白过来, 单纯用feof是不对的。
实际上到了文件尾,feof还是返回的真,只有再读一个字节(比如fgetc一下),使用feof才会得到假。就是fread一个文件得到的东西,会比fwrite写入的内容多一个字节。所以,要在switch里加以处理。具体怎么处理,就看你文件怎么存储的,你要怎么用了。
- CString与Char*的转换,以及中文字符写入文件,文件的读写等
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换以及CString和LPCTSTR的关系
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- CString与LPCWSTR/LPSTR/LPWSTR/char*等类型的转换
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- JDK中的设计模式
- 基础算法
- 检测字符串长度
- C++面试题_不断更新
- struts2文件上传
- CString与Char*的转换,以及中文字符写入文件,文件的读写等
- hdu 2674 N!Again 数论水题啊~~~
- 【c++ primer读书笔记】【第2章】变量和基本类型
- Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)
- 关于android 如何安装 assets文件下的apk
- Python Paramiko模块安装和使用
- struts工作原理(一个url调用到返回结果全过程)
- VC++ D2D呈现水晶报表并实时刷新
- 腾讯科技讯 在智能手机市场的领先优势缩小后