windows编码小结


ascii又叫多字节编码,每个字符1字节;

unicode又叫宽字节编码,每个字符2字节,支持多种语言,是windows底层支持的语言,所以编程时使用unicode更高效。

asciiunicode
datatypecharwchar_t
CHARWCHAR
WinMainWinMainwWinMain
stringprintfwprintf
strcpywcscpy
apiMessageBoxAMessageBoxW

L表示将字符或字符串转换成宽字符集编码。

注意,字符不等于字节。

T版函数

使用_T表示根据当前工程属性的需要,也可以写成_TEXT,它只是一个宏,在使用的时候,需要将要处理的字符串用括号()括起来,但 L 在使用时则可以不用括号。 头文件为<tchar.h>


#ifdef UNICODE
    typedef LPWSTR LPTSTR 
#else
    typedef LPSTR LPTSTR
#endif // !UNICODE

#ifdef UNICODE
#define CreateWindowEx  CreateWindowExW
#else
#define CreateWindowEx  CreateWindowExA
#endif // !UNICODE

所以,windows编程中没有CreateWindowEx()这个函数。

字符串转换api

int
WINAPI
WideCharToMultiByte(
    _In_ UINT CodePage,
    _In_ DWORD dwFlags,
    _In_NLS_string_(cchWideChar) LPCWCH lpWideCharStr,
    _In_ int cchWideChar,
    _Out_writes_bytes_to_opt_(cbMultiByte, return) LPSTR lpMultiByteStr,
    _In_ int cbMultiByte,
    _In_opt_ LPCCH lpDefaultChar,
    _Out_opt_ LPBOOL lpUsedDefaultChar
    );
    
    
int
WINAPI
MultiByteToWideChar(
    _In_ UINT CodePage,
    _In_ DWORD dwFlags,
    _In_NLS_string_(cbMultiByte) LPCCH lpMultiByteStr,
    _In_ int cbMultiByte,
    _Out_writes_to_opt_(cchWideChar, return) LPWSTR lpWideCharStr,
    _In_ int cchWideChar
    );

为了方便使用,提供两个宏。

#include <stdio.h>
#include <windows.h>

#define WCHAR_TO_CHAR(lpWCHAR, lpCHAR) \
	 WideCharToMultiByte(CP_ACP, NULL, lpWCHAR, -1, lpCHAR, _countof(lpCHAR), NULL, FALSE)

#define CHAR_TO_WCHAR(lpCHAR, lpWCHAR) \
	MultiByteToWideChar(CP_ACP, NULL, lpCHAR, -1,lpWCHAR, _countof(lpWCHAR))

int main()
{
	WCHAR wbuf[20] = { 0 };
	CHAR cbuf[20] = { 0 };

	WCHAR_TO_CHAR(L"abc", cbuf);
	printf("%s\n",cbuf);

	CHAR_TO_WCHAR("def",wbuf);
	printf("%ls\n",wbuf);

	return 0;
}

注意,宽字符输出格式%ls,否则只输出d。

字符数应该使用_countof()

还有一个有点作弊的方法,就是先用CStringA,然后CStringW = cStringA; 反过来一样用。很常用!!!!!!!!!!!!!

数字字符串转换

数字->字符:

sprintf_s(), swprintf_s(), _stprintf()

_itoa_s(), _itow_s(), _ito_t_s()

字符->数字:

sscanf_s(), swscanf_s(), _stcanf_s()

atoi(), wtoi(), _ttoi()

strtol(),可选进制。printf("%d\n",strtol("64",NULL,16));

字符串处理函数

asciiunicodeT
获取长度strlenwcsnlen_tcslen
拷贝strcpy_swcscpy_s_tcscpy_s
与数字转换sscanf_sswscanf_s_stscanf_s
sprintf_sswprintf_s_stprintf_s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值