VC转换格式
c 式转换规则
c 式转换规则
C语言中的数据类型转换规则可以分为自动转换和强制转换两类。
自动转换发生在不同数据类型的数据混合运算时,C语言会根据需要将数据类型转换统一,以保证运算的正确性。
具体转换规则如下:
1. 算术运算中,低类型能够转换为高类型。
例如,char类型和short类型会转换为int类型,float类型数据在运算时一律转换为double类型。
2. 在赋值表达式中,右边表达式的值会自动隐式转换为左边变量的类型,并赋值给左边变量。
如果右边变量的数据类型长度比左边长,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。
3. 在函数调用中,系统会隐式地将实参转换为形参的类型后,赋给形参。
4. 函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。
强制转换是通过类型转换运算来实现的,形式为在要转换的数值或者表达式前用小括号将要类型括起来。
例如:(int)x表示将x转换为整型。
如需获取更多C语言中数据类型的转换规则和相关解释,可以查阅相关的编程书籍或者咨询专业技术人员。
基于VC++的BMP格式图像与GIF格式图像转换
UI NT bTy e;DW ORD b S z t p f ie;UI NT b Re f — sre e v dl; NT f s r e 2; UI b Re e v d DW ORD f b O佃 i t s;
}B T P IE E D R: IMA FL H A E
和 JE P G编码 。实 现 B MP与 G F的 相 互 转换 , I 首 先 必须 对 B MP与 GF文 件 的格式 进行 分析 , 而 I 从 实 现两 者 的读 取显 示 等相 关 操 作 , 后要 对 L w 然 Z 算 法有 明确 的理解 和把 握 。这样 当找到 图像数 据 时 , 以利 用 该 算 法 将 B 可 MP文 件 转 化 成 G F文 I 件 。同时 , 利用 逆 变换 , 就 是解 码 程 序 , 以实 也 可
方面 , 常用 的有 哈夫 曼 编码 、 程 编 码 、 Z 编码 行 LW
型 、 件大 小和 存放 位 置 等 信 息 , Widw . 文 在 no s3 0 以上 版本 位 图文 件 中用 BT P IE A E IMA FL HE D R结 构来 定义 :yee t c tg IMA FL H A E t df r taBT P IE E D R p su
文 章 编 号 :0 7—14 20 )2— 0 3— 3 10 4 X(0 7 1 0 2 0
基于 V C++的 B MP格式图像与 G F格式图像转换 I
韩 姣
( 汉理工 大学 信息工程学院 , 武 湖北 武汉 4 0 7 ) 3 0 0
摘
要: 探讨 了在 V c++环境下 B P图像文件与 G F图像文件 的转换 。首先分析 了 B M I MP与 G F2种 图像 的 I
VC类型格式转换
项目中经常用到各种不同的语言的朋友们应该会比较有这样的体会:一种开发语言用了比较长的时间,突然间转到另外一种语言的话,不管是数据类型或者语法结构,多多少少都会有那么一点不适应。
哪怕MFC中的类型与标准C++也是一样的。
下面是MFC/C++/C中字符类型CString, int, string, char*之间的转换的说明与举例,经常用的东西,相信对于用C/C++的朋友,还是比较有用的。
1、CString,int,string,char*之间的转换string转CStringCString.format("%s", string.c_str());char转CStringCString.format("%s", char*);char转stringstring s(char *);string转char *char *p = string.c_str();// CString转std::stringCStringstr = dlg.GetPathName(); setlocale(LC_ALL, "chs");char *p = new char[256];wcstombs( p, str, 256 );m_fileName = p;1,string ->CStringCString.format("%s", string.c_str());用c_str()确实比data()要好. 2,char -> stringstring s(char *);你的只能初始化,在不是初始化的地方最好还是用assign(). 3,CString -> string string s(CString.GetBuffer()); GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.《C++标准函数库》中说的有三个函数可以将字符串的内容转换为字符数组和C—string1.data(),返回没有“\0”的字符串数组2,c_str(),返回有“\0”的字符串数组3,copy()CString互转int将字符转换为整数,可以使用atoi、_atoi64或atol。
VC中Ansi、Unicode、UTF8字符串之间的转换和写入文本
//同上,分配空间要给'\0'留个空间
//UTF8虽然是Unicode的压缩形式,但也是多字节字符串,所以可以以char的形式保存
{
// ansi to unicode
char* szAnsi = "abcd1234你我他";
//预转换,得到所需空间的大小
int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, szAnsi, strlen(szAnsi), NULL, 0);
::MessageBoxW(GetSafeHwnd(), wszString, wszString, MB_OK);
//写文本同ansi to unicode
}
Ansi转换utf8和utf8转换Ansi就是上面2个的结合,把unicode作为中间量,进行2次转换即可
//最后加上'\0'
szAnsi[ansiLen] = '\0';
//Ansi版的MessageBox API
::MessageBoxA(GetSafeHwnd(), szAnsi, szAnsi, MB_OK);
//接下来写入文本
//写文本文件,ANSI文件没有BOM
VC中Ansi、Unicode、UTF8字符串之间的转换和写入文本
Ansi字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个\0结尾,常用于txt文本文件
VC中实现GB2312、BIG5、Unicode编码转换的方法
VC中实现GB2312、BIG5、Unicode编码转换的⽅法本⽂主要以实例形式讨论了VC编译环境下,实现字符串和⽂件编码⽅式转换的⽅法,在linux下请使⽤Strconv来实现。
具体⽅法如下:⼀、⽂件编码格式转换//GB2312 编码⽂件转换成 Unicode:if((file_handle = fopen(filenam,"rb")) != NULL){//从GB2312源⽂件以⼆进制的⽅式读取buffernumread = fread(str_buf_pool,sizeof(char),POOL_BUFF_SIZE,file_handle);fclose(file_handle);//GB2312⽂件buffer转换成UNICODEnLen =MultiByteToWideChar(CP_ACP,0,str_buf_pool,-1,NULL,0);MultiByteToWideChar(CP_ACP,0,str_buf_pool,-1,(LPWSTR)str_unicode_buf_pool,nLen);//组装UNICODE Little Endian编码⽂件⽂件头标⽰符"0xFF 0xFE"//备注:UNICODE Big Endian编码⽂件⽂件头标⽰符"0xFF 0xFE"//Little Endian与Big Endian编码差异此处不详述unicode_little_file_header[0]=0xFF;unicode_little_file_header[1]=0xFE;//存储⽬标⽂件if((file_handle=fopen(filenewname,"wb+")) != NULL){fwrite(unicode_little_file_header,sizeof(char),2,file_handle);numwrite = fwrite(str_unicode_buf_pool,sizeof(LPWSTR),nLen,file_handle);fclose(file_handle);}}⼆、字符串编码格式转换//GB2312 转换成 Unicode:wchar_t* GB2312ToUnicode(const char* szGBString){UINT nCodePage = 936; //GB2312int nLength=MultiByteToWideChar(nCodePage,0,szGBString,-1,NULL,0);wchar_t* pBuffer = new wchar_t[nLength+1];MultiByteToWideChar(nCodePage,0,szGBString,-1,pBuffer,nLength);pBuffer[nLength]=0;return pBuffer;}//BIG5 转换成 Unicode:wchar_t* BIG5ToUnicode(const char* szBIG5String){UINT nCodePage = 950; //BIG5int nLength=MultiByteToWideChar(nCodePage,0,szBIG5String,-1,NULL,0);wchar_t* pBuffer = new wchar_t[nLength+1];MultiByteToWideChar(nCodePage,0,szBIG5String,-1,pBuffer,nLength);pBuffer[nLength]=0;return pBuffer;}//Unicode 转换成 GB2312:char* UnicodeToGB2312(const wchar_t* szUnicodeString){UINT nCodePage = 936; //GB2312int nLength=WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,NULL,0,NULL,NULL);char* pBuffer=new char[nLength+1];WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);pBuffer[nLength]=0;return pBuffer;}//Unicode 转换成 BIG5:char* UnicodeToBIG5(const wchar_t* szUnicodeString){UINT nCodePage = 950; //BIG5int nLength=WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,NULL,0,NULL,NULL);char* pBuffer=new char[nLength+1];WideCharToMultiByte(nCodePage,0,szUnicodeString,-1,pBuffer,nLength,NULL,NULL);pBuffer[nLength]=0;return pBuffer;}//繁体中⽂BIG5 转换成简体中⽂ GB2312char* BIG5ToGB2312(const char* szBIG5String){LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);wchar_t* szUnicodeBuff = BIG5ToUnicode(szBIG5String);char* szGB2312Buff = UnicodeToGB2312(szUnicodeBuff);int nLength = LCMapString(lcid,LCMAP_SIMPLIFIED_CHINESE, szGB2312Buff,-1,NULL,0);char* pBuffer = new char[nLength + 1];LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE,szGB2312Buff,-1,pBuffer,nLength);pBuffer[nLength] = 0;delete[] szUnicodeBuff;delete[] szGB2312Buff;return pBuffer;}//简体中⽂ GB2312 转换成繁体中⽂BIG5char* GB2312ToBIG5(const char* szGBString){LCID lcid = MAKELCID(MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),SORT_CHINESE_PRC);int nLength = LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,NULL,0);char* pBuffer=new char[nLength+1];LCMapString(lcid,LCMAP_TRADITIONAL_CHINESE,szGBString,-1,pBuffer,nLength);pBuffer[nLength]=0;wchar_t* pUnicodeBuff = GB2312ToUnicode(pBuffer);char* pBIG5Buff = UnicodeToBIG5(pUnicodeBuff);delete[] pBuffer;delete[] pUnicodeBuff;return pBIG5Buff;}三、API 函数:MultiByteToWideChar参数说明第⼀个参数为代码页, ⽤ GetLocaleInfo 函数获取当前系统的代码页,936: 简体中⽂, 950: 繁体中⽂第⼆个参数为选项,⼀般⽤ 0 就可以了第三个参数为 ANSI 字符串的地址, 这个字符串是第⼀个参数指定的语⾔的 ANSI 字符串 (AnsiString)第四个参数为 ANSI 字符串的长度,如果⽤ -1, 就表⽰是⽤ 0 作为结束符的字符串第五个参数为转化⽣成的 unicode 字符串 (WideString) 的地址, 如果为 NULL, 就是代表计算⽣成的字符串的长度第六个参数为转化⽣成的 unicode 字符串缓存的容量,也就是有多少个UNICODE字符。
通讯录格式转换集锦
通讯录格式转换集锦随着大家生活水平的提高,更换手机已经是一件十分平常的事情,新手机功能越来越强大,功能越来越多,体验新手机的心情当然是愉悦的,可是通讯录的转移和编辑(比如用EXCEL来编辑)就不怎么舒服了,往往死一大堆脑细胞和花费大量的时间来搜索转换方法。
下面我就搜集一些通讯录的转换方法,绝对能解决您的大部分问题,呵呵。
一、Vcard格式转换为CSV格式的通讯录(vcf >> csv)1. 方法一:使用软件来转换我感觉这个方法是最方便的,基本只需要一键就可以转换,而且速度也特别快,信息丢失也较少。
1.1准备工作从网上下载一个文程相(/node/199),按照readme.txt的说明,解压缩后直接复制xampplite程序文件夹到D盘的根目录下(完成后的目录类似于:D:\ xampplite),在此文件夹中找到kenweini_start.bat或xampp-control.exe后双击,在确保运行了Apache和Mysql后,在浏览器中输入http://localhost就打开了此软件的首页,并使用用户名kenweini登录(密码和用户名同)。
点击菜单的〖通讯录〗→〖通讯录转换〗,然后点击“Vcard通讯录转换为CSV格式的通讯录”链接打开转换页面。
1.2 选择要转换的Vcard文件、选择输出格式点击页面的“vCard文件”输入框后的“浏览”按钮,从您的计算机中选择要转换的那个Vcard格式的文件(后缀为vcf)。
点击页面的“格式”后面的下拉列表,这里选择 QQ(CSV)格式,因为文程相专门对它进行了设计优化,兼容性最好,丢失信息最少。
1.3转换点击“转换”按钮,3 秒钟就转换完成了,请将结果保存在您的计算机中。
转换出的这个CSV格式的通讯录文件可以直接导入QQ同步助手的云通讯录中,也可以导入到文程相这个平台中(导入时请选择〖通讯录〗→〖导入通讯录〗→〖QQ同步助手〗),还可以使用EXCEL打开它(比如编辑和转换为办公室通讯录)等等。
基于VC ++的高光谱遥感影像存储格式转化实现研究
I l m e t to fS o i g Fo m a a s o m o u t s e t a mp e n a i n o t r n r t Tr n f r f rM li p c r l —
Re o e S nsn ̄一 a a e n VC+ m t e i l ReBa o m s d0 V _ + -
态连 接 数 据 库 编 程 , 实现 了它 们 间 的 快速 转换 存 储 , 系统运 行 效 果 良好 。 关 键 词 :B P S I ;B Q; 海 洋遥 感 ; 转换 存 储
中图 分 类 号 :P 3 27
文 献 标 志 码 :B
文 章 编 号 :17.6 3(0 8 402 .3 624 2 20 )0.0 20
f r a , t r f r , i i c sa y t r n f r i g om a n i e r td s se o m t he eo e t sne e s r o ta so m ma ef r ti ntg a e y t m. Th spa ra h e e hequ c i pe c i v s t ik ta f r tr g m o g t e a d t es se wo k l. r nso m so a ea n h m n h y tm r swe1
摘 要 :海 洋航 空 遥 感 多光 谱 图像 ,有 多种 存 储 格 式 ,图 像 存 储 格 式 与 其 显 示 效 果 有 重 要 的 关 系 。 各 系统根 据 赤 潮 、溢
油 、海冰 等 海 洋现 象的 特 点 ,采 用 不 同 的存 储 格 式 进 行 处 理 ,因此 在 集 成 系 统 中 ,需要 对 图像 进 行 格 式 转换 ;利 用 V C 动
VC工程中各种文件
dsw, aps, clw, plg这些文件都可以删除。
只保留 H,C,CPP,DSP,RC,剩余文件去除只读属性,其余全部删除。
然后打开DSP 有提示选 YES,就可以了*.dsp(DeveloperStudio Project):是VC++的工程配置文件,比如说你的工程包含哪个文件,你的编译选项是什么等等,编译的时候是按照.dsp的配置来的。
*.dsw(DeveloperStudio Workspace):是工作区文件,用来配置工程文件的。
它可以指向一个或多个.dsp文件。
*.clw:是 ClassWizard信息文件,实际上是INI文件的格式,有兴趣可以研究一下.有时候ClassWizard出问题,手工修改CLW文件可以解决.如果此文件不存在的话,每次用ClassWizard的时候绘提示你是否重建。
*.opt:工程关于开发环境的参数文件,如工具条位置等信息。
*.aps:(AppStudio File),资源辅助文件,二进制格式,一般不用去管他。
*.rc:资源文件。
在应用程序中经常要使用一些位图、菜单之类的资源, VC中以rc为扩展名的文件称为资源文件, 其中包含了应用程序中用到的所有的windows资源, 要指出的一点是rc文件可以直接在VC集成环境中以可视化的方法进行编辑和修改。
*.plg:是编译信息文件,编译时的error和warning信息文件(实际上是一个html文件,一般用处不大),在Tools->Options里面有个选项可以控制这个文件的生成。
*.hpj:(Help Project)是生成帮助文件的工程,用microsfot Help Compiler可以处理。
*.mdp:(Microsoft DevStudio Project)是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的DSP格式。
*.bsc:是用于浏览项目信息的,如果用Source Brower的话就必须有这个文件。
在VC++6.0中将JPG格式图片转换成BMP格式
在VC++6.0中将JPG格式图片转换成BMP格式思路:利用GDI+来完成难点:(1)配置GDI开发环境,添加配置代码(2)在当文档程序中添加转换代码注意:本文档由ybdesire参考网上资料撰写完成,代码已经做过测试,可直接复制张贴实现过程:一、配置GDI开发环境(1)下载GDI+ SDK for Visual C++ 6.0/code/legacy/gdi/GDIPlus.zip下载的GDIPlus文件夹中有Includes,Lib文件夹和gdiplus.dll文件。
将Includes和Lib中的文件分别拷到VC6安装目录中的VC98\include和lib文件夹中;新建MFC项目后,才使用gdiplus.dll,到时候将它拷到对应工程的debug 文件夹下。
(2)新建MFC单文档应用程序show:1、在StdAfx.h 中添加如下代码#include <afxdtctl.h>#define ULONG_PTR ULONG#include <gdiplus.h>using namespace Gdiplus;#pragma comment(lib, "gdiplus.lib")2、如(1)中所说,将gdiplus.dll拷贝到本工程的Debug或Release目录下3、在show.h中的class CShowApp : public CWinApp中添加private:GdiplusStartupInput m_gdiplusStartupInput;ULONG_PTR m_pGdiToken;4、在show.cpp中的BOOL CShowApp::InitInstance()中添加GdiplusStartup(&m_pGdiToken,&m_gdiplusStartupInput,NULL);5、为CShow App添加名字为ExitInstance的虚函数的,并在ExitInstance中添加如下退出GDI+的代码GdiplusShutdown(m_pGdiToken);return CWinApp::ExitInstance();(3)测试GDI+是否配置成功void CShowView::OnDraw(CDC* pDC){CShowDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);Graphics graphics(pDC->m_hDC);Pen pen(Color(255, 0, 255));graphics.DrawLine(&pen, 0, 0, 200, 100);}若能成功运行,表明GDI+配置成功二、添加转换代码,实现将打开的JPG格式文件保存成BMP格式文件(1)在CSshowView中添加如下成员变量CString strOpenFileName;(2)在CSshowView中添加如下成员函数1、在CSshowView中添加ToWChar函数WCHAR* CShowView::ToWChar(char *str){//在GDI+中,有关字符的参数类型全部都是WCHAR类型的//该函数是将传统字符串进行转换static WCHAR buffer[1024];wcsset(buffer,0);MultiByteToWideChar(CP_ACP,0,str,strlen(str),buffer,1024);return buffer;}2、在CSshowView中添加GetImageCLSID函数int CShowView::GetImageCLSID(const WCHAR *format, CLSID *pCLSID) {UINT num=0;UINT size=0;ImageCodecInfo* pImageCodecInfo=NULL;GetImageEncodersSize(&num,&size);if(size==0)return FALSE; // 编码信息不可用// 分配内存pImageCodecInfo=(ImageCodecInfo*)(malloc(size));if(pImageCodecInfo==NULL)return FALSE; // 分配失败// 获得系统中可用的编码方式的所有信息GetImageEncoders(num,size,pImageCodecInfo);// 在可用编码信息中查找 format 格式是否被支持for(UINT i=0;i<num;++i){//MimeType: 编码方式的具体描述if (wcscmp(pImageCodecInfo[ i] .MimeType,format)==0){*pCLSID=pImageCodecInfo[i].Clsid;free(pImageCodecInfo);return TRUE;}}free(pImageCodecInfo);return FALSE;}3、在MFC ClassWixard中重载OnFileOpen()void CShowView::OnFileOpen(){static char szFilter[ ]="常见图像格式文件(*.*)|*.*|";CFileDialogdlgChoseImage(1,NULL,NULL,NULL,szFilter);if(dlgChoseImage.DoModal() ==IDOK){strOpenFileName=dlgChoseImage.GetPathName();// 打开文件后立即在窗口中显示 (重绘客户窗口)this->Invalidate() ;}}4、在MFC ClassWixard中重载OnFileSave()void CShowView::OnFileSave(){if( strOpenFileName.IsEmpty() ){AfxMessageBox("当前没有打开图像文件, 不能进行保存!");return;}// 建立图形对象Graphics graphics(GetDC()->m_hDC);// 装入当前已经打开的图像文件Imageimage(ToWChar(strOpenFileName.GetBuffer(strOpenFileName.GetLength() ) ));CString strFileSave;// 将其他格式的图像全部另存为 BMP 文件static char szFilter[ ]= "位图(*.BMP)|*.BMP|";CFileDialogdlgChoseImage(0,"BMP",strOpenFileName,NULL,szFilter);if(dlgChoseImage.DoModal() ==IDOK){strFileSave=dlgChoseImage.GetPathName();CLSID clsid;if(GetImageCLSID(L"image/bmp", &clsid)){image.Save(ToWChar(strFileSave.GetBuffer(strFileSave.GetLength() )), &clsid, NULL);// 将保存后的图像进行显示strOpenFileName=strFileSave;this->Invalidate() ;}}}参考资料[1]/poonjun/archive/2009/01/04/3701724.aspx[2]/DavidHu/articles/1191635.html[3]/bbsgcon.php?board=VisualC&num=785[4]《图像格式转换在数字仪表识别系统中的应用》刘娜, 汪仁煌, 庞然/*-------------------------------------------------------------*/扩展知识阅读[3] 色彩鲜艳漂亮的高品质图像,一个个形象的Windows图标,高速运动、活灵活现的三维动画,这些生动的图形无一不显示着程序设计者的艺术才华。
VC改变窗口大小和样式
改变窗口的外观和大小改变窗口的外观和大小需要在窗口创建以前改变。
所以我们可以在CMainFrame的PreCreateWindow中改变CREATESTRUCT 结构体的值就行了。
E.G.BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)改变窗口的大小-> cs.cx = 300; cs.cy = 200;改变窗口的显示位置坐标是 cs.x 和 cs.y这里常用的一个函数是::GetSysMetrics(SM_CXSCREEN);::GetSysMetrics(SM_CYSCREEN);用来取得屏幕的大小。
要改变窗口标题栏的字符串:cs.lpszName = "Seven"; 会发现标题栏不会改变窗口的标题栏的上的字符串。
改变单文档应用程序的标题栏的字符串参考MSDN windowstyles/Frame-window styles 下面有一个Changing the styles of a window create by MFC./ The SDI Case默认的情况是WS_OVERLAPPEDWINDOW and FWS_ADDTOTITLE styles FWS_ADDTOTITLE is add the document title to the window’s caption.去掉FWS_ADDTOTITLE 就可以更改窗口标题栏字符串。
cs.style &= ~FWS_ADDTOTITLE;cs.lpszName = "Seven";如果我们需要改变背景,画刷,光标等等时候。
我们可以在:PreCreateWindow中创建窗口类,WNDCLASS wndClass;把这个类里的值改变成自己想要的内容就可以了。
E.G.wndClass.cbClsExtra = 0;wndClass.cbWndExtra = 0;wndClass.hbrBackground = (HBRUSH)GetStockObject(DKGRAY_BRUSH);wndClass.hCursor = LoadCursor(NULL, IDC_WAIT);wndClass.hIcon = LoadIcon(NULL, IDI_WARNING);wndClass.hInstance = AfxGetInstanceHandle();获取应用程序的实例句柄可用AfxGetInstanceHandle函数,这个函数是一个全局的函数,前面有一个AFX表示是一个应用程序框架类函数,哪里都可用。
GTA3和VC车辆MOD转换成SA格式教程
GTA3/VC车辆MOD转换为SA格式教程(根据GTA-DFF-IO工具作者的英文教程翻译)据我所知,转换 GTA3/VC 里面的车辆不像你所想像的那么简单!但事实上也确实不难!GTA3/VC 和 SA 的不同之处你应该知道:- dummies(虚点)层次不同- SA中只有一个车轮- 增加了特殊的渲染效果- 车辆需要新的碰撞模型文件- txd 中的图象是经过压缩的第一步首先,选择一辆SA中你想要替换的车辆,导入MAX中。
点选“Select Objects”菜单(或按H键?) ,然后勾选左下角的“Display Subtree”选项。
看仔细 dummies(虚点)/objects(实体)的连接层次!例如: taillights、 headlights 以前是连接到chassis_dummy上,现在则是直接连到最顶端的(车名) dummy上!而且如 wing_hi_ok、 wing_hi_dam 现在也没有了!当你记住层次连接后,就可以隐藏或删除SA中这辆原先的车子。
将你的车辆(GTA3/VC)导入MAX中,参照原先SA中车辆的层次连接重新连接导入车辆的dummies/object!提示:用作者的提供的 Helper Tool V3,可以帮助你自动完成层次连接!**小提示:我发现用ZMOD导出的车辆的许多dummies 变成了实体,因此在游戏中它就不会正确显示,因此你要将它改回为dummies!**对于SA中不必单独命名的车体部分,你可以把它追加到其它实体上。
例如:追加wing_hi_ok到bump_front_ok上,追加wing_hi_dam到bump_front_dam上。
MAX中“Attach Options”菜单弹出后, 记得勾选“Condense Materail and IDS”选项。
如果要从层次中分离实体,要先选择子物体(如:要将“engine”从“chassis_dummy”中分离出来,先选择“engine”),再点选如下图的“Unlink Selection”按钮:要连接实体,先选择子物体,再点击“Link”按钮。
视频转换器video converter
video converterMyVideoConverter 是一款专业音视频转换工具,她几乎支持所有流行音视频格式之间的相互转化,允许在改变视频的大小和播放速度的条件下支持AVI, DivX, XviD, MPEG, WMV, MOV, ASF, QuickTime ,RM,RMVB等格式的相互转化;且支持所有移动设备的音视频格式转换。
1、基本信息软件名称:MyVideoConverter软件版本:1.5.1支持的操作系统:win2000/2003/xp/Win7/Win8、MacOSX10.6/10.7/10.8/10.9 使用权限:免费软件、免费试用软件、收费软件下载地址:软件界面:软件图标:购买连接:2、软件功能✌批量转换不同类型的目标格式文件⏹对所选择的同一种输出格式进行批量转换;⏹对所选择的不同输出格式进行批量转换。
✌多设备格式:iOS系统和Android系统等移动设备⏹iPhone系列:iPhone5S\iPhone5C\iPhone5\iPhone4S\iPhone4\iPad2\iPadmini\iPad\iPod等;⏹Android系统的设备:三星、诺基亚、摩托罗拉、黑莓、Sony、LG、HTC、联想、小米等系列移动设备。
✌高清播放器:播放视频文件时一键实现瞬间快照,以获取经典图片⏹高清晰视频文件播放;⏹播放视频文件时一键实现照相。
✌转换前通过播放检查质量⏹检查需要转换文件的质量;⏹是否做转换文件的处理,如:添加字幕、合并文件等。
✌支持从VCD中提取文件并转化成各种各样的视频文件和移动视频文件✌支持大容量的视频文件✌高清晰转化,转化速度快,容易使用。
3、支持类型4、更多信息什么是video converter(视频转换)?视频转换,简言之即将目前市场中所有视频文件转换为您期望的视频或音频格式,以方便各种设备播放,更能将音视频文件转换为您期望的小文件、高清晰的媒体文件,以供网络分享。
c++ 后缀介绍
c++ 后缀介绍.APS:存放二进制资源的中间文件,VC把当前资源文件转换成二进制格式,并存放在APS文件中,以加快资源装载速度。
资源辅助文件。
.BMP:位图资源文件。
.BSC:浏览信息文件,由浏览信息维护工具(BSCMAKE)从原始浏览信息文件(.SBR)中生成,BSC文件可以用来在源代码编辑窗口中进行快速定位。
用于浏览项目信息的,如果用source brower的话就必须有这个文件。
可以在project options 里去掉Generate Browse Info File,这样可以加快编译进度。
.C:用C语言编写的源代码文件。
.CLW:ClassWizard生成的用来存放类信息的文件。
classwizard信息文件,ini 文件的格式。
.CNT:用来定义帮助文件中“Contents”的结构。
.CPP或.CXX:用C++语言编写的源代码文件。
.CUR:光标资源文件。
.DEF:模块定义文件,供生成动态链接库时使用。
.DLG:定义对话框资源的独立文件。
这种文件对于VC工程来说并非必需,因为VC一般把对话框资源放在.RC资源定义文件中。
.DSP:VC开发环境生成的工程文件,VC4及以前版本使用MAK文件来定义工程。
项目文件,文本格式。
.DSW:VC开发环境生成的WorkSpace文件,用来把多个工程组织到一个WorkSpace 中。
工作区文件,与.dsp差不多。
.EXP:由LIB工具从DEF文件生成的输出文件,其中包含了函数和数据项目的输出信息,LINK工具将使用EXP文件来创建动态链接库。
只有在编译DLL时才会生成,记录了DLL文件中的一些信息。
.H、.HPP或.HXX:用C/C++语言编写的头文件,通常用来定义数据类型,声明变量、函数、结构和类。
.HLP:Windows帮助文件。
.HM:在Help工程中,该文件定义了帮助文件与对话框、菜单或其它资源之间ID值的对应关系。
.HPJ:由Help Workshop生成的Help工程文件,用来控制Help文件的生成过程。
VC Format 函数详解
VC format函数详解o●.侽紸桷|o 发表于2007-11-7 9:02:00Format是一个很常用,却又似乎很烦的方法,本人试图对这个方法的帮助进行一些翻译,让它有一个完整的概貌,以供大家查询之用:首先看它的声明:function Format(const Format: string; const Args: array of const): string; overload;事实上Format方法有两个种形式,另外一种是三个参数的,主要区别在于它是线程安全的,但并不多用,所以这里只对第一个介绍:function Format(const Format: string; const Args: array of const): string; overload;Format参数是一个格式字符串,用于格式化Args里面的值的。
Args又是什么呢,它是一个变体数组,即它里面可以有多个参数,而且每个参数可以不同。
如以下例子:Format('my name is %6s',['wind']);返回后就是my name is wind现在来看Format参数的详细情况:Format里面可以写普通的字符串,比如'my name is'但有些格式指令字符具有特殊意义,比如"%6s"格式指令具有以下的形式:"%" [index ":"] ["-"] [width] ["." prec] type它是以"%"开始,而以type结束,type表示一个具体的类型。
中间是用来格式化type类型的指令字符,是可选的。
先来看看type,type可以是以下字符:d 十制数,表示一个整型值u 和d一样是整型值,但它是无符号的,而如果它对应的值是负的,则返回时是一个2的32次方减去这个绝对值的数如:Format('this is %u',[-2]);返回的是:this is 4294967294f 对应浮点数e 科学表示法,对应整型数和浮点数,比如Format('this is %e',[-2.22]);返回的是:this is -2.22000000000000E+000等一下再说明如果将数的精度缩小g 这个只能对应浮点型,且它会将值中多余的数去掉比如Format('this is %g',[02.200]);返回的是:this is 2.2n 只能对应浮点型,将值转化为号码的形式。
vc6.0unicode+和utf8相互转换
Vc下unicode和UTF8相互转换在vc下使用SQLite数据库时,由于SQL语句使用utf8 编码,而CString 是unicode编码。
一,utf8 转UnicodeCString UTF8ToUnicode(char* UTF8){DWORD dwUnicodeLen; //转换后Unicode的长度TCHAR *pwText; //保存Unicode的指针CString strUnicode; //返回值//获得转换后的长度,并分配内存dwUnicodeLen = MultiByteToWideChar(CP_UTF8,0,UTF8,-1,NULL,0);pwText = new TCHAR[dwUnicodeLen];if (!pwText){return strUnicode;}//转为UnicodeMultiByteToWideChar(CP_UTF8,0,UTF8,-1,pwText,dwUnicodeLen);//转为CStringstrUnicode.Format(_T("%s"),pwText);//清除内存delete []pwText;//返回转换好的Unicode字串return strUnicode;}二,Unicode转utf8size_t CDGQDialog::g_f_wctou8(char * dest_str, const wchar_t src_wchar){int count_bytes = 0;wchar_t byte_one = 0, byte_other = 0x3f; // 用于位与运算以提取位值0x3f--->00111111unsigned char utf_one = 0, utf_other = 0x80; // 用于"位或"置标UTF-8编码0x80--->1000000 wchar_t tmp_wchar =L'0'; // 用于宽字符位置析取和位移(右移位)unsigned char tmp_char =L'0';if (!src_wchar)//return (size_t)-1;for (;;) // 检测字节序列长度{if (src_wchar <= 0x7f){ // <=01111111count_bytes = 1; // ASCII字符: 0xxxxxxx( ~ 01111111)byte_one = 0x7f; // 用于位与运算, 提取有效位值, 下同utf_one = 0x0;break;}if ( (src_wchar > 0x7f) && (src_wchar <= 0x7ff) ){ // <=0111,11111111count_bytes = 2; // 110xxxxx 10xxxxxx[1](最多个位, 简写为*1)byte_one = 0x1f; // 00011111, 下类推(1位的数量递减)utf_one = 0xc0; // 11000000break;}if( (src_wchar> 0x7ff) && (src_wchar<= 0xffff) ){ //0111,11111111<=11111111,11111111 count_bytes = 3; // 1110xxxx 10xxxxxx[2](MaxBits: 16*1)byte_one = 0xf; // 00001111utf_one = 0xe0; // 11100000break;}if ( (src_wchar > 0xffff) && (src_wchar <= 0x1fffff) ){ //对UCS-4的支持..count_bytes = 4; // 11110xxx 10xxxxxx[3](MaxBits: 21*1)byte_one = 0x7; // 00000111utf_one = 0xf0; // 11110000break;}if ( (src_wchar > 0x1fffff) && (src_wchar <= 0x3ffffff) ){count_bytes = 5; // 111110xx 10xxxxxx[4](MaxBits: 26*1)byte_one = 0x3; // 00000011utf_one = 0xf8; // 11111000break;}if ( (src_wchar > 0x3ffffff) && (src_wchar <= 0x7fffffff) ){count_bytes = 6; // 1111110x 10xxxxxx[5](MaxBits: 31*1)byte_one = 0x1; // 00000001utf_one = 0xfc; // 11111100break;}return (size_t)-1; // 以上皆不满足则为非法序列}// 以下几行析取宽字节中的相应位, 并分组为UTF-8编码的各个字节tmp_wchar = src_wchar;for (int i = count_bytes; i > 1; i--){ // 一个宽字符的多字节降序赋值tmp_char = (unsigned char)(tmp_wchar & byte_other);///后位与byte_other 00111111dest_str[i - 1] = (tmp_char | utf_other);/// 在前面加----跟或tmp_wchar >>= 6;//右移位}//这个时候i=1//对UTF-8第一个字节位处理,//第一个字节的开头"1"的数目就是整个串中字节的数目tmp_char = (unsigned char)(tmp_wchar & byte_one);//根据上面附值得来,有效位个数dest_str[0] = (tmp_char | utf_one);//根据上面附值得来1的个数// 位值析取分组__End!return count_bytes;}int CDGQDialog::g_f_wcs_to_pchar(CString& wstr,char * p){wchar_t wc=L'1';char c[10]="1";//申请一个缓存size_t r=0; //size_t unsigned integer Result of sizeof operatorint i=0;int j=0;for(i=0;i<wstr.GetLength();i++){wc=wstr.GetAt(i);//得到一个宽字符r=g_f_wctou8(c,wc);//将一个宽字符按UTF-8格式转换到p地址if(r==-1)//出错判断AfxMessageBox(_T("wcs_to_pchar error"));p[j]=c[0];//第一个值附给pj++;if(r>1){for(size_t x=1;x<r;x++){p[j]=c[x];j++;}}}//p[j]='0';return 1;}三.转换实例void CMytestDlg::OnBnClickedButton2(){// TODO: 在此添加控件通知处理程序代码CString ccId=L"2007071王";CString sql;char mySql[100];memset(mySql,0,sizeof(mySql));sql.Format(L"select cxrq,cxdw,dxrq,dxdw,fxrq,fxdw,cx,flx from j_clxx where trainnum_info_id ='%s'",ccId);//wchar_t sql=L'你';g_f_wcs_to_pchar(sql,mySql);CString sql1 =UTF8ToUnicode(mySql);MessageBox(sql);//g_f_wctou8(mySql,sql);// CString str_temp;// for (int i=90;i<strlen(mySql);i++)// {// str_temp.Format(L"%c",mySql[i]);// MessageBox(str_temp);// }。
libfaac vc 编译-概述说明以及解释
libfaac vc 编译-概述说明以及解释1.引言1.1 概述概述:本文旨在介绍如何编译libfaac vc库。
libfaac vc是一个用于音频编码的开源库,它能够将音频数据转换为高质量的AAC格式,并提供其他音频处理功能。
在本篇文章中,我们将详细探讨libfaac vc编译的过程和步骤。
libfaac vc编译是一项相对复杂的任务,需要掌握一定的编译技术和工具。
通过正确编译libfaac vc库,我们可以为音频处理和编码过程提供高效的解决方案。
本文将从理解libfaac vc编译的重要性开始,然后介绍具体的编译过程和步骤。
最后,我们将总结libfaac vc编译的重要性,并提出进一步研究和应用的建议。
在进入正文之前,我们将对本文结构进行简要介绍。
首先,引言部分将概述本文的目的和整体结构。
接下来的正文部分将深入讨论libfaac vc 编译的理解、过程和步骤。
最后,结论部分将总结libfaac vc编译的重要性,并提出进一步研究和应用的建议。
在阅读本文之前,读者应该具备一定的编程和编译知识,以便更好地理解和应用本文中介绍的内容。
希望本文能够对正在进行libfaac vc编译的工程师们提供有价值的指导和帮助。
让我们深入探索libfaac vc编译的世界吧!1.2 文章结构文章结构部分主要介绍了整篇文章的组织结构,即各个章节的内容安排。
本文分为引言、正文和结论三个部分。
引言部分包括概述、文章结构和目的三个子部分。
在概述部分,将简要介绍libfaac vc编译的背景和意义。
文章结构部分即本章节,将详细介绍整篇文章的组织结构。
目的部分将明确说明本文的目标和意图。
正文部分将重点讨论libfaac vc编译的理解、编译过程及步骤。
在理解libfaac vc编译的部分,将介绍libfaac vc编译的概念和原理。
在编译过程及步骤部分,将详细讲解如何进行libfaac vc的编译,并列出具体的步骤和操作方法。
VC项目投资协议格式版(七篇)
VC项目投资协议格式版甲方:乙方:甲、乙投资人(以下简称“共同投资人”)经友好协商,根据中华人民共和国法律、法规的规定,双方本着互惠互利的原则,就甲乙双方合作投资项目事宜达成如下协议,以共同遵守。
第一条、共同投资人的投资额和投资方式甲、乙双方同意,以双方注册成立的公司为项目投资主体。
各方出资分别:甲方占出资总额的_____%。
乙方占出资总额的_____%。
第二条、利润分享和亏损分担共同投资人按其出资额占出资总额的比例分享共同投资的利润,分担共同投资的亏损。
共同投资人各自以其出资额为限对共同投资承担责任,共同投资人以其出资总额为限对股份有限公司承担责任。
共同投资人的出资形成的股份及其孳生物为共同投资人的共有财产,由共同投资人按其出资比例共有。
共同投资于股份有限公司的股份转让后,各共同投资人有权按其出资比例取得财产。
第三条、事务执行1、共同投资人委托甲方代表全体共同投资人执行共同投资的日常事务,包括但不限于:(1)在股份公司发起设立阶段,行使及履行作为股份有限公司发起人的权利和义务。
(2)在股份公司成立后,行使其作为股份公司股东的权利、履行相应义务。
(3)收集共同投资所产生的孳息,并按照本协议有关规定处置。
2、其他投资人有权检查日常事务的执行情况,甲方有义务向其他投资人报告共同投资的经营状况和财务状况。
3、甲方执行共同投资事务所产生的收益归全体共同投资人,所产生的亏损或者民事责任,由共同投资人承担。
4、甲方在执行事务时如因其过失或不遵守本协议而造成其他共同投资人损失时,应承担赔偿责任。
5、共同投资人可以对甲方执行共同投资事务提出异议。
提出异议时,应暂停该项事务的执行。
如果发生争议,由全体共同投资人共同决定。
6、共同投资的下列事务必须经全体共同投资人同意:(1)转让共同投资于股份有限公司的股份。
(3)更换事务执行人。
第四条、投资的转让1、共同投资人向共同投资人以外的人转让其在共同投资中的全部或部分出资额时,须经全部共同投资人同意。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CString ,BSTR ,LPCTSTR之间关系和区别CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。
CString 是一个完全独立的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。
typedef OLECHAR FAR* BSTR;typedef const char * LPCTSTR;vc++中各种字符串的表示法首先char* 是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容。
LP的含义是长指针(long pointer)。
LPSTR是一个指向以‘\0’结尾的ANSI字符数组的指针,与char*可以互换使用,在win32中较多地使用LPSTR。
而LPCSTR中增加的‘C’的含义是“CONSTANT”(常量),表明这种数据类型的实例不能被使用它的API函数改变,除此之外,它与LPSTR是等同的。
1.LP表示长指针,在win16下有长指针(LP)和短指针(P)的区别,而在win32下是没有区别的,都是32位.所以这里的LP和P是等价的.2.C表示const3.T是什么东西呢,我们知道TCHAR在采用Unicode方式编译时是wchar_t,在普通时编译成char.为了满足程序代码国际化的需要,业界推出了Unicode标准,它提供了一种简单和一致的表达字符串的方法,所有字符中的字节都是16位的值,其数量也可以满足差不多世界上所有书面语言字符的编码需求,开发程序时使用Unicode(类型为wchar_t)是一种被鼓励的做法。
LPWSTR与LPCWSTR由此产生,它们的含义类似于LPSTR与LPCSTR,只是字符数据是16位的wchar_t而不是char。
然后为了实现两种编码的通用,提出了TCHAR的定义:如果定义_UNICODE,声明如下:typedef wchar_t TCHAR;如果没有定义_UNICODE,则声明如下:typedef char TCHAR;LPTSTR和LPCTSTR中的含义就是每个字符是这样的TCHAR。
CString类中的字符就是被声明为TCHAR类型的,它提供了一个封装好的类供用户方便地使用。
LPCTSTR:#ifdef _UNICODEtypedef const wchar_t * LPCTSTR;#elsetypedef const char * LPCTSTR;#endifVC常用数据类型使用转换详解先定义一些常见类型变量借以说明int i = 100;long l = 2001;float f=300.2;double d=12345.119;char username[]="女侠程佩君";char temp[200];char *buf;CString str;_variant_t v1;_bstr_t v2;一、其它数据类型转换为字符串短整型(int)itoa(i,temp,10); //将i转换为字符串放入temp中,最后一个数字表示十进制itoa(i,temp,2); //按二进制方式转换长整型(long)ltoa(l,temp,10);二、从其它包含字符串的变量中获取指向该字符串的指针CString变量str = "2008北京奥运";buf = (LPSTR)(LPCTSTR)str;BSTR类型的_variant_t变量v1 = (_bstr_t)"程序员";buf = _com_util::ConvertBSTRToString((_bstr_t)v1);三、字符串转换为其它数据类型strcpy(temp,"123");短整型(int)i = atoi(temp);长整型(long)l = atol(temp);浮点(double)d = atof(temp);四、其它数据类型转换到CString使用CString的成员函数Format来转换,例如:整数(int)str.Format("%d",i);浮点数(float)str.Format("%f",i);字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值 str = username;五、BSTR、_bstr_t与CComBSTRCComBSTR、_bstr_t是对BSTR的封装,BSTR是指向字符串的32位指针。
char *转换到BSTR可以这样: BSTR b=_com_util::ConvertStringToBSTR("数据"); //使用前需要加上头文件comutil.h反之可以使用char *p=_com_util::ConvertBSTRToString(b);六、VARIANT 、_variant_t 与 COleVariantVARIANT的结构可以参考头文件VC98\Include\OAIDL.H中关于结构体tagVARIANT的定义。
对于VARIANT变量的赋值:首先给vt成员赋值,指明数据类型,再对联合结构中相同数据类型的变量赋值,举个例子:VARIANT va;int a=2001;va.vt=VT_I4; //指明整型数据va.lVal=a; //赋值对于不马上赋值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);进行初始化,其本质是将vt设置为VT_EMPTY,下表我们列举vt与常用数据的对应关系:unsigned char bVal; VT_UI1short iVal; VT_I2long lVal; VT_I4float fltVal; VT_R4double dblVal; VT_R8VARIANT_BOOL boolVal; VT_BOOLSCODE scode; VT_ERRORCY cyVal; VT_CYDATE date; VT_DATEBSTR bstrVal; VT_BSTRIUnknown FAR* punkVal; VT_UNKNOWNIDispatch FAR* pdispVal; VT_DISPATCHSAFEARRAY FAR* parray; VT_ARRAY|*unsigned char FAR* pbVal; VT_BYREF|VT_UI1short FAR* piVal; VT_BYREF|VT_I2long FAR* plVal; VT_BYREF|VT_I4float FAR* pfltVal; VT_BYREF|VT_R4double FAR* pdblVal; VT_BYREF|VT_R8VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOLSCODE FAR* pscode; VT_BYREF|VT_ERRORCY FAR* pcyVal; VT_BYREF|VT_CYDATE FAR* pdate; VT_BYREF|VT_DATEBSTR FAR* pbstrVal; VT_BYREF|VT_BSTRIUnknown FAR* FAR* ppunkVal; VT_BYREF|VT_UNKNOWNIDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCHSAFEARRAY FAR* FAR* pparray; VT_ARRAY|*VARIANT FAR* pvarVal; VT_BYREF|VT_VARIANTvoid FAR* byref; VT_BYREF_variant_t是VARIANT的封装类,其赋值可以使用强制类型转换,其构造函数会自动处理这些数据类型。
例如:long l=222;ing i=100;_variant_t lVal(l);lVal = (long)i;COleVariant的使用与_variant_t的方法基本一样,请参考如下例子:COleVariant v3 = "字符串", v4 = (long)1999;CString str =(BSTR)v3.pbstrVal;long i = v4.lVal;七、其它对消息的处理中我们经常需要将WPARAM或LPARAM等32位数据(DWORD)分解成两个16位数据(WORD),例如:LPARAM lParam;WORD loValue = LOWORD(lParam); //取低16位WORD hiValue = HIWORD(lParam); //取高16位对于16位的数据(WORD)我们可以用同样的方法分解成高低两个8位数据(BYTE),例如:WORD wValue;BYTE loValue = LOBYTE(wValue); //取低8位BYTE hiValue = HIBYTE(wValue); //取高8位如何将CString类型的变量赋给char*类型的变量1、GetBuffer函数:使用CString::GetBuffer函数。
char *p;CString str="hello";p=str.GetBuffer(str.GetLength());str.ReleaseBuffer();将CString转换成char * 时CString str("aaaaaaa");strcpy(str.GetBuffer(10),"aa");str.ReleaseBuffer();当我们需要字符数组时调用GetBuffer(int n),其中n为我们需要的字符数组的长度.使用完成后一定要马上调用ReleaseBuffer();还有很重要的一点就是,在能使用const char *的地方,就不要使用char *2、memcpy:CString mCS=_T("cxl");char mch[20];memcpy(mch,mCS,20);3、用LPCTSTR强制转换:尽量不使用char *ch;CString str;ch=(LPSTR)(LPCTSTR)str;CString str = "good";char *tmp;sprintf(tmp,"%s",(LPTSTR)(LPCTSTR)str);4、CString Msg;Msg=Msg+"abc";LPTSTR lpsz;lpsz = new TCHAR[Msg.GetLength()+1];_tcscpy(lpsz, Msg);char * psz;strcpy(psz,lpsz);CString类向const char *转换char a[100];CString str("aaaaaa");strncpy(a,(LPCTSTR)str,sizeof(a));或者如下:strncpy(a,str,sizeof(a));以上两种用法都是正确地. 因为strncpy的第二个参数类型为const char *.所以编译器会自动将CString类转换成const char *.CString转LPCTSTR (const char *)CString cStr;const char *lpctStr=(LPCTSTR)cStr;LPCTSTR转CStringLPCTSTR lpctStr;CString cStr=lpctStr;将char*类型的变量赋给CString型的变量可以直接赋值,如:CString myString = "This is a test";也可以利用构造函数,如:CString s1("Tom");将CString类型的变量赋给char []类型(字符串)的变量1、sprintf()函数CString str = "good";char tmp[200] ;sprintf(tmp, "%s",(LPCSTR)str);(LPCSTR)str这种强制转换相当于(LPTSTR)(LPCTSTR)strCString类的变量需要转换为(char*)的时,使用(LPTSTR)(LPCTSTR)str然而,LPCTSTR是const char *,也就是说,得到的字符串是不可写的!将其强制转换成LPTSTR去掉const,是极为危险的!一不留神就会完蛋!要得到char *,应该用GetBuffer()或GetBufferSetLength(),用完后再调用ReleaseBuffer()。