Relation with Conversion
1. WCHAR / TCHAR:
WideCharToMultiByte()
wcstombs()
CString()
ATL macros: OLE2A(),W2T(),W2CT(),lstrcpy()
NOTE: #include <atlconv.h>
swprintf(wchar,L"%LS",char);
wcscpy(wchar,L"ActiveDesktop");
2. GUID、SYSTEMTIME、BSTR、char*和CString转换
(1) char*转换成CString
若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如
char chArray[] = "This is a test";
char * p = "This is a test";或LPSTR p =
"This is a test";
或在已定义Unicode应的用程序中TCHAR * p = _T("This is a test");
或LPTSTR p = _T("This
is a test");
CString theString = chArray;
theString.Format(_T("%s"), chArray);
theString = p;
(2) CString转换成char*
若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:
方法一,使用强制转换。例如:
CString theString( "This is a test" );
LPTSTR lpsz
=(LPTSTR)(LPCTSTR)theString;
方法二,使用strcpy。例如:
CString theString( "This is a test" );
LPTSTR lpsz = new
TCHAR[theString.GetLength()+1];
_tcscpy(lpsz, theString);
需要说明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二个参数是 const wchar_t*
(Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。
方法三,使用CString::GetBuffer。例如:
CString s(_T("This is a test "));
LPTSTR p = s.GetBuffer();
//
在这里添加使用p的代码
if(p != NULL) *p = _T('/0');
s.ReleaseBuffer();
//
使用完后及时释放,以便能使用其它的CString成员函数
(3) BSTR转换成char*
方法一,使用ConvertBSTRToString。例如:
#include <comdef.h>
#pragma comment(lib, "comsupp.lib")
int
_tmain(int argc, _TCHAR* argv[]){
BSTR bstrText =
::SysAllocString(L"Test");
char* lpszText2 =
_com_util::ConvertBSTRToString(bstrText);
SysFreeString(bstrText); //
用完释放
delete[] lpszText2;
return 0;
}
方法二,使用_bstr_t的赋值运算符重载。例如:
_bstr_t b = bstrText;
char* lpszText2 = b;
(4) char*转换成BSTR
方法一,使用SysAllocString等API函数。例如:
BSTR bstrText = ::SysAllocString(L"Test");
BSTR bstrText =
::SysAllocStringLen(L"Test",4);
BSTR bstrText =
::SysAllocStringByteLen("Test",4);
方法二,使用COleVariant或_variant_t。例如:
//COleVariant strVar("This is a test");
_variant_t strVar("This is a
test");
BSTR bstrText = strVar.bstrVal;
方法三,使用_bstr_t,这是一种最简单的方法。例如:
BSTR bstrText = _bstr_t("This is a test");
方法四,使用CComBSTR。例如:
BSTR bstrText = CComBSTR("This is a test");
或
CComBSTR bstr("This is a
test");
BSTR bstrText = bstr.m_str;
方法五,使用ConvertStringToBSTR。例如:
char* lpszText = "Test";
BSTR bstrText =
_com_util::ConvertStringToBSTR(lpszText);
(5) CString转换成BSTR
通常是通过使用CStringT::AllocSysString来实现。例如:
CString str("This is a test");
BSTR bstrText =
str.AllocSysString();
…
SysFreeString(bstrText); // 用完释放
(6) BSTR转换成CString
一般可按下列方法进行:
BSTR bstrText = ::SysAllocString(L"Test");
CStringA
str;
str.Empty();
str = bstrText;
或
CStringA str(bstrText);
(7) ANSI、Unicode和宽字符之间的转换
方法一,使用MultiByteToWideChar将ANSI字符转换成Unicode字符,使用WideCharToMultiByte将Unicode字符转换成ANSI字符。
方法二,使用“_T”将ANSI转换成“一般”类型字符串,使用“L”将ANSI转换成Unicode,而在托管C++环境中还可使用S将ANSI字符串转换成String*对象。例如:
TCHAR tstr[] = _T("this is a test");
wchar_t wszStr[] = L"This is a
test";
String* str = S”This is a test”;
方法三,使用ATL 7.0的转换宏和类。ATL7.0在原有3.0基础上完善和增加了许多字符串转换宏以及提供相应的类,它具有如图3所示的统一形式:
其中,第一个C表示“类”,以便于ATL
3.0宏相区别,第二个C表示常量,2表示“to”,EX表示要开辟一定大小的缓冲。SourceType和DestinationType可以是A、
T、W和OLE,其含义分别是ANSI、Unicode、“一般”类型和OLE字符串。例如,CA2CT就是将ANSI转换成一般类型的字符串常量。下面
是一些示例代码:
LPTSTR tstr= CA2TEX<16>("this is a test");
LPCTSTR tcstr= CA2CT("this is a test");
wchar_t wszStr[] = L"This is a test";
char* chstr = CW2A(wszStr);
(8) GUID转换成 CString
示例代码如下:
CString GetGuid() //取得唯一标示
{
BSTR a;
a=SysAllocString(L" ");
HRESULT hr;
GUID g;
hr=::CoCreateGuid(&g);
int ret=StringFromGUID2(g,a,39); /////
CString c(a);
return c;
}
(9) CString转换成SYSTEMTIME
示例代码如下:
_variant_t temp = "04-17-2007";
temp.ChangeType(VT_DATE);
VariantTimeToSystemTime(temp.date,&systemtime); //
systemtime为转换后的系统时间
(10) SYSTEMTIME转换成CString
示例代码如下:
SYSTEMTIME st;
char buf[80];
GetSystemTime(&st); //获得当前系统时间
GetDateFormat(LOCALE_SYSTEM_DEFAULT,
0,
&st,
"dd/MM/yyyy", //转换年月日
buf,
sizeof(buf));
CString time = buf;
GetTimeFormat(LOCALE_USER_DEFAULT,
0,
&st,
NULL,
buf,
sizeof(buf)); //转换时间
time += " ";
CString temp1 = buf;
time += temp1; //time最终格式为 [日/月/年 时间]
分享到:
相关推荐
这种转换对于那些只想保留视频中的音乐部分或在没有视频支持的设备上播放音频很有用。通常,视频转换器会提供这样的功能,用户只需选择视频文件,然后设置输出格式为MP3,即可完成转换。 "视频转换工具"可能是指...
5. **等待完成**:转换过程可能需要一些时间,取决于硬盘或U盘的容量和电脑性能。 6. **验证结果**:转换完成后,检查新文件系统是否正常工作,所有文件是否都能访问。 转换后,用户可以享受NTFS带来的好处,例如,...
这些功能对于需要管理大量图片内容的用户来说尤为有用。 迅捷视频转换器正式注册版的推出,为用户提供了更加丰富的功能和更好的使用体验。注册版用户可以无限制地使用所有功能,并享受更快的转换速度和更高质量的...
这在需要对PDF内容进行进一步编辑、添加动画或交互元素时非常有用。 市场上有许多PDF转换工具,既有免费的也有付费的。例如,Adobe Acrobat Pro是一款功能强大的专业工具,提供精确的转换选项;而在线工具如Small...
这类软件通常支持批量处理,对于大量地理数据的转换非常有用。 在实际应用中,正确地进行坐标系转换至关重要,无论是科学研究、工程建设还是日常生活中的导航,都离不开这一技术。了解并掌握坐标系转换的原理和方法...
通过转换链接,用户可以绕过一些下载限制,提高下载效率。这个工具的使用方法可能包括输入115网盘的分享链接,然后获取转换后的下载地址,或者直接拖放链接到工具界面进行转换。然而,用户在使用过程中应当谨慎,...
这在解析网络数据包或配置网络设备时非常有用。 关于标签“UNIX”,在UNIX系统中,时间戳的处理是通过标准库函数如`time()`和`localtime()`实现的。同时,UNIX系统提供了强大的命令行工具,如`date`,可以方便地...
这种操作在需要单独使用音频,例如制作音乐播放列表或者在设备上节省存储空间时非常有用。 【标签】"mp3 转换"进一步明确了核心功能,即与MP3音频格式相关的转换操作。这可能包括将其他音频格式(如WAV、AAC、FLAC...
to-delphi”和“转换脚本”表明这个工具可能不仅是一个图形用户界面应用,也可能包含一些脚本或命令行工具,允许开发者通过命令行接口执行转换操作,这对于自动化工作流或集成到其他构建系统中可能是有用的。...
这对于处理发票、报告或统计资料非常有用。确保在转换过程中,表格的列宽、行高和单元格内容都能准确无误地映射到Excel中,是衡量转换质量的重要标准。 总之,“PDF转换成DOC\XLS”涉及了使用特定工具,如Solid ...
对于企业用户,批量转换功能尤其有用,可以一次性处理大量PDF文件,大大提高了工作效率。 此外,除了PDF转Excel,迅捷PDF转换器通常还支持其他格式的转换,如PDF转Word、PDF转图片、PDF合并、PDF分割等,满足用户在...
这样的工具在互联网上下载资源时非常有用,特别是对于那些受到特定下载管理器限制的链接。 在互联网上,不同类型的链接有不同的特性和用途。例如,普通链接(HTTP/HTTPS/FTP)可以直接通过浏览器或任何下载工具访问...
这在编程和调试中非常有用,因为它提供了一种更简洁的表示方式。 4. 与二进制转换:浮点数转换为二进制是基础,反之亦然。这个过程涉及将指数和尾数分别转换,然后组合成完整的浮点数格式。对于二进制到浮点数的...
这对于需要修改原文档内容或格式的情况非常有用,比如论文修订、报告编辑等。 Excel转换则适用于那些包含大量数据和表格的PDF文件。转换后,用户可以直接在Excel中进行公式计算、数据分析和图表制作,提升工作效率...
这款工具的主要功能包括视频格式转换、视频编辑以及可能的一些额外的实用功能,如截取视频片段、合并视频文件等。以下是关于这个主题的详细知识点: 1. **视频格式转换**:Convert万能视频转换器能够将视频文件从一...
以下是关于迅捷PDF转换器的一些关键知识点: 1. **PDF与Word转换**:迅捷PDF转换器的核心功能之一是将PDF文档转换为Microsoft Word(doc)格式。这在需要编辑或修改PDF内容时尤其有用,因为原始PDF文件通常难以直接...
这种灵活性对于那些依赖旧版OSG文件但希望升级到最新库的项目来说尤其有用。转换过程中,用户应确保理解每个版本的变化,以便于在必要时调整模型或脚本。 在提供的文件列表中,“osgConv”很可能是这个转换工具的主...
而xmplay.txt可能是软件的使用手册或帮助文档,包含了关于如何操作Xmplay以及各种功能的详细介绍,对于初次使用者来说是非常有用的参考资料。 总之,Xmplay音乐转换工具凭借其直观的用户界面和强大的音频处理能力,...
在实际应用中,这种转换工具对于跨平台协作、共享CAD图纸或者确保在任何设备上都能正确显示文本都非常有用。例如,当设计师在一个系统上创建了包含特定`.shx`字体的CAD文件,然后发送给没有安装相同字体的其他设计师...
换带计算允许我们在不同带之间移动坐标,这对于跨越多个带的地图制作非常有用。 "COORD GM2.0"很可能是指该工具的版本号,表明它是协调工具的第二代产品,可能在功能、性能或用户体验上有所提升。 这个工具特别之...