ANSI,MBCS,UNICODE


编程的书中经常介绍UNICODE,还有字符串函数中经常见各种格式,下面以以"abc我你他"为例分别介绍

测试源码:

TCHAR* p = _T("abc我你他"); 
std::cout << _tcsclen(p);

我们写的代码应该是这个样子的,即既符合ANSI又符合UNICODE的代码,使用_T宏和_ts函数集。

一、ANSI编码:普通英文字母一个,汉字占两个字节。"abc我你他"占用9个字节。
 
 编译选项里没有相关选项
 输出9
 此时,_tcsclen为strlen,结果为字节数。

 使用多字符函数,即MultiByte函数,编译选项里设置_MBCS, 该选项VC默认生成的工程里有(Project->Setting->C++->Preprocessor Setting)。
 此时_tcsclen 为_mbslen。输出结果为6,实际占用9个字节。

二、UNICODE编码,所谓宽字符,英文字符和汉字都占用2个字节,编译选项里设置_UNICODE,UNICODE
 源码相当于wchar_t* p = L"abc我你他";
  std::cout << wcslen(p);
 结果为6,实际占用12个字节。;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用多字节字符集 (MBCS) 或者 Unicode 字符集来进行转换,你可以使用一些 C++ 标准库提供的函数来实现。 如果你想将一个窄字符字符串 (char *) 转换为宽字符字符串 (LPCWSTR),你可以使用 MultiByteToWideChar 函数。以下是一个示例代码: ```cpp #include <windows.h> #include <iostream> int main() { const char* narrowStr = "Hello, World!"; // 窄字符字符串 int wideStrLength = MultiByteToWideChar(CP_UTF8, 0, narrowStr, -1, NULL, 0); // 获取宽字符字符串的长度 wchar_t* wideStr = new wchar_t[wideStrLength]; // 分配内存来存储宽字符字符串 MultiByteToWideChar(CP_UTF8, 0, narrowStr, -1, wideStr, wideStrLength); // 执行转换 // 打印宽字符字符串 std::wcout << wideStr << std::endl; delete[] wideStr; // 释放内存 return 0; } ``` 如果你想将一个宽字符字符串 (LPCWSTR) 转换为窄字符字符串 (char *),你可以使用 WideCharToMultiByte 函数。以下是一个示例代码: ```cpp #include <windows.h> #include <iostream> int main() { LPCWSTR wideStr = L"Hello, World!"; // 宽字符字符串 int narrowStrLength = WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, NULL, 0, NULL, NULL); // 获取窄字符字符串的长度 char* narrowStr = new char[narrowStrLength]; // 分配内存来存储窄字符字符串 WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, narrowStr, narrowStrLength, NULL, NULL); // 执行转换 // 打印窄字符字符串 std::cout << narrowStr << std::endl; delete[] narrowStr; // 释放内存 return 0; } ``` 这些示例代码演示了如何使用 Windows API 函数来进行字符串的转换。请确保在使用这些函数之前,包含了 `<windows.h>` 头文件。 希望这能帮助你进行字符集转换!如果你有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值