可能因爲默認用Unicode 所以LPTSTR\LPCWSTR都被定義成Unicode類型的字符串 ,char != wchar
TCHAR到LPVOID不同的類型要強制類型轉換 TCHAR szBuf(128);的意思並不是TCHAR szBuf[128];
解决办法:
就是楼上说的原因,把C:\\File.txt改成_T("C:\\File.txt"),
把Hello World!"改成_T("Hello World!")试试
扩展:
大家一起做一个项目,经常发现有的人爱用strcpy等标准ANSI函数,有的人爱用_tXXXX函数,这个问题曾经搞的很混乱。为了统一,有必要把来龙去脉搞清楚。
为了搞清这些函数,就必须理请几种字符类型的写法。char就不用说了,先说一些wchar_t。wchar_t是Unicode字符的数据类型,它实际定义在<string.h>里:
typedef unsigned short wchar_t;
不能使用类似strcpy这样的ANSI C字符串函数来处理wchar_t字符串,必须使用wcs前缀的函数,例如wcscpy。为了让编译器识别Unicode字符串,必须以在前面加一个“L”,例如:
wchar_t *szTest=L"This is a Unicode string.";
下面在看看TCHAR。如果你希望同时为ANSI和Unicode编译的源代码,那就要include TChar.h。TCHAR是定义在其中的一个宏,它视你是否定义了_UNICODE宏而定义成char或者wchar_t。如果你使用了TCHAR,那么就不应该使用ANSI的strXXX函数或者Unicode的wcsXXX函数了,而必须使用TChar.h中定义的_tcsXXX函数。另外,为了解决刚才提到带“L”的问题,TChar.h中定义了一个宏:“_TEXT”。
以strcpy函数为例子,总结一下:
.如果你想使用ANSI字符串,那么请使用这一套写法:
char szString[100];
strcpy(szString,"test");
.如果你想使用Unicode字符串,那么请使用这一套:
wchar_t szString[100];
wcscpyszString,L"test");
.如果你想通过定义_UNICODE宏,而编译ANSI或者Unicode字符串代码:
TCHAR szString[100];
_tcscpy(szString,_TEXT("test"));
分享到:
相关推荐
本篇文章将深入探讨如何在Windows环境下将`const char*`转换为`LPCWSTR`。 首先,理解两者之间的差异至关重要。`const char*`是用于表示8位ASCII字符的指针,通常用于C和C++中的文本操作。ASCII字符集只包含128个...
C++中char无法转换为LPCWSTR是由于类型不兼容引起的,LPCWSTR类型是const wchar_t *,而const char[]是const char *,因此不能隐式转换。在VS2010开发平台中,默认情况下使用Unicode字符集,而在VC6.0中默认使用...
大家在学习或者使用Windows编程中,经常会碰到字符串之间的转换,char*转LPCWSTR也是其中一个比较常见的转换。下面就列出几种比较常用的转换方法。大家可以根据自己的需求选择相对应的方法,下面来一起学习学习吧。 ...
* LPCWSTR (const wchar_t \*) 转换为 System.String * PCAHR (char \*) 转换为 System.String * BSTR 转换为 System.String 三、结构体类型转换 在 C++ 中,结构体是一种组合数据类型。在 C# 中,结构体对应为 ...
在这里,我们将讨论几种常见的数据类型转换,包括 Char* 转换为 CString、CString 转换为 const char*、CString 转换为 LPSTR、CString 转换为 int 等。 1. Char* 转换为 CString 在 Unicode 字符集下,Char* 转换...
当我们将`CString`对象转换为`LPCTSTR`时,它会返回一个指向内部缓冲区的常量指针。例如: ```cpp CString cstr("asdd"); const char* ch = (LPCTSTR)cstr; ``` 在这个例子中,`ch`现在指向`cstr`内部的字符...
// 将CHAR字符串转换为CString CString CharToCString(const CHAR* pszChar) { return CString(pszChar); } // 将CString转换为CHAR字符串 CHAR* CStringToChar(CString strCString) { int nLen = ...
wince上各种类型转换特别是字符串是很头疼的,这个类是项目用的, 每个都测试好用,使用静态方法,直接引用后,写【::cv::就可以用】 typedef int u32; //转换类,所有的转换函数在这里静态 2是to的意思 //cs:...
不同的编码方式可以将同一个字符表示为不同的二进制码,从而导致不同的计算机系统之间的字符编码不兼容。为了解决这个问题,Windows操作系统提供了两个重要的函数:MultiByteToWideChar和WideCharToMultiByte,这两...
lpMultiByteStr参数是要转换的字符串,cbMultiByte参数是要转换字符串的长度,-1表示转换到字符串结尾。 lpWideCharStr参数是接收转换后输出的宽字符串的缓冲,如果为NULL, 就是代表计算生成的字符串的长度。...
从`std::string`到`const char*`的转换可以使用`c_str()`方法: ```cpp const char* pcStr = str.c_str(); ``` 对于`wchar_t`类型的转换,可以使用`wcstombs`和`mbstowcs`函数进行宽字符串和窄字符串间的转换。 ...
2. **char\* to CString**: `char*`可以直接赋值给`CString`,因为`CString`有一个构造函数能处理`const char*`类型。 ```cpp char* zStr = "Hello,world!"; CString cStr = zStr; ``` 3. **CString to LPCSTR**: `...
1. **CString to char\***:通过类型强制转换,可以将`CString`转换为`char*`。例如,`LPCTSTR`是一个指向`const TCHAR`的指针,它在UNICODE和ANSI编译模式下分别对应`LPCWSTR`和`LPCSTR`。所以,`char* zStr = ...
* CString(const unsigned char* psz):创建一个 CString 对象,并将其初始化为 unsigned char 类型的字符串 psz。 * CString(LPCSTR lpsz):创建一个 CString 对象,并将其初始化为 ASCII 字符串 lpsz。 成员函数 ...
因此,在将C++代码移植到C#环境中时,需要对数据类型进行相应的转换。下面是常见的C++和C#数据类型转换: 1. HANDLE(void *) ---- System.IntPtr 在C++中,HANDLE是一个void指针,用于表示一个系统资源的句柄。在...
通过以上步骤,你可以有效地从Unicode文本文件中读取字符串,并将其转换为所需的格式。在`unicoderead`这个示例项目中,你可能会找到类似的实现,通过分析代码可以更深入地了解这些函数的具体用法。
1. **从其他数据类型转换为字符串**: - 使用`itoa`、`ltoa`等函数将整数转换为字符串。 - 使用`CString`的`Format`方法将任意类型的数据转换为字符串。 2. **从包含字符串的变量中获取指针**: - 通过`(LPCTSTR...
- **类间转换**:可以通过构造函数直接转换,例如`CStringA strA1(str1)`将`CString`转换为`CStringA`,反之亦然。 - **字符和字符串之间**:使用`GetAt`方法获取单个字符,如`str1.GetAt(2)`;使用`GetBuffer`...
`将数字13转换为字符串"13"。 ### 结语 通过上述分析,我们不仅了解了`CString`的构造、比较、修改和查询等基本操作,还深入探讨了其高级功能,如格式化输出和高效查找。掌握这些知识对于熟练使用`CString`类,...