Windows中Unicode和ANSI字符串(tchar.h)

40 篇文章 1 订阅
14 篇文章 0 订阅

一、函数/类型 命名

ANSI的字符串处理函数:
strlen()strcmp()strcpy()……
Unicode的字符串处理函数:
wcslen()wcscmp()wcscpy()……

<tchar.h>提供的自动转换:
_TEXT()TCHAR_tcslen()_tcscmp()_tcscpy()……

二、规则

当定义了UNICODE宏时,TCHAR类型就为wchar_t,未定义时就为char

_TEXT()宏是为了方便的定义常量,定义了UNICODE宏时,会在字面量前面加上大写的L,如:wchar_t str[] = L"hello";未定义时就为字面量本身。

相应地,_tcsXXX系列函数也会在定义了UNICODE宏时转成宽字符处理函数,在未定义时转成ANSI的处理函数。

注意,Visual Studio创建的项目默认会定义UNICODE宏;
实际上,应确保要么同时定义了UNICODE_UNICODE,要么一个都不定义。(因为针对不属于C++标准的标识符,C运行库始终会为它们附加下划线前缀。但是Windows团队并没有这样做。)

三、Example

#define UNICODE
#define _UNICODE

// #undef UNICODE
// #undef _UNICODE

#include <string.h>
#include <tchar.h>
#include <stdio.h>

int main(void)
{
    TCHAR buf[] = _TEXT("你好啊");

    printf("sizeof _TCHAR:%ld\n", sizeof(TCHAR));

    printf("sizeof buf:%ld, len of buf:%ld\n", sizeof(buf), _tcslen(buf));
}

  • 参考书籍:《Windows核心编程 第5版》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

barbyQAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值