使用C标准函数库实现多字节和宽字节的转换

定义

  • 多字节字符:多个字节表示一个字符,每个国家不一样,没有统一编码方案;
  • 宽字符:Unicode编码方案,4个字节表示一个字符;

C++中,char*表示多字节字符串,wchar_t*表示宽字符串

上面两个字符串没法使用强制类型转换

两者的相互转换

使用C标准库函数mbstowcswcstombs

size_t mbstowcs (wchar_t* dest, const char* src, size_t max);    //将多字节编码转为宽字节编码

size_t wcstombs(char* dest, const wchar_t* stc, size_t max);    //将宽字节转换为多字节编码

上面两个函数转换过程中受系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型,函数setlocale进行系统编码的设置,在Unix系统下可以使用locale -a查看系统支持的编码类型;

使用C++标准库函数实现

多字节字符转宽字节字符

wchar_t* mbs2wcs(const char* srcMbs)
{
    if (nullptr == srcMbs || _mbstrlen(srcMbs) == 0)
        return nullptr;

    size_t size = mbstowcs(nullptr, srcMbs, 0);
    if (size <= 0)
        return nullptr;

    wchar_t* res = (wchar_t*)malloc(size * 2);
    auto error = mbstowcs(res, srcMbs, _mbstrlen(srcMbs) * 2);
    return res;
}

宽字节字符转多字节字符

char* wcs2mbs(const wchar_t* srcWcs)
{
    if (srcWcs == nullptr || wcslen(srcWcs) == 0)
        return nullptr;

    size_t size = wcstombs(nullptr, srcWcs, 0);
    if (size <= 0)
        return nullptr;

    char* res  = (char*)malloc(2 * size);
    auto error = wcstombs(res, srcWcs, wcslen(srcWcs) * 2);
    return res;
}

原文链接: https://www.cnblogs.com/zuixime0515/p/12422248.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    使用C标准函数库实现多字节和宽字节的转换

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/333620

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午9:16
下一篇 2023年3月1日 下午9:16

相关推荐