c++ - char * 到 wchar_t * 函数实现

标签 c++ c unicode

我正在尝试实现将 char* 转换为 wchar_t* 的函数。但问题是,wprintf 显示不同的结果。我做错了什么?

wchar_t *toWchar(char *data)
{
    if(!data)
    {
        return NULL;
    }

    int size = strlen(data);
    if(!size)
    {
        return NULL;
    }

    char *temp = (char *)malloc(size * 2);
    if(!temp)
    {
        return NULL;
    }

    int j = 0;
    for(int i = 0; i < size; i++)
    {
        temp[j++] = data[i];
        temp[j++] = '\0';
    }

    return (wchar_t *)temp;
}

编辑: 主要功能:

int main()
{
    wchar_t *temp = toWchar("hello, world!");
    if(temp)
        wprintf("%ls\n", temp);
    return 0;
}

最佳答案

作为起点; gcc 将为您提供平台相关的 wchar 类型/大小,如下所示:

echo "" | gcc -E - -dM | grep WCHAR

#define __WCHAR_MAX__ 2147483647
#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1)
#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
#define __WCHAR_TYPE__ int
#define __SIZEOF_WCHAR_T__ 4

A resource建议:

“C 和 C++ 在其各自标准的 2011 年修订版中引入了固定大小的字符类型 char16_t 和 char32_t,以提供 16 位和 32 位 Unicode 转换格式的明确表示,而 wchar_t 则由实现定义。”

关于c++ - char * 到 wchar_t * 函数实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17913500/

相关文章:

c# - 在哪里可以找到 Win32 常量?

c# - 如何在 Unity3D 中使用 C++ dll?

在 solaris 10 sparc 上将 perl 编译为 64 位

c - 两个文件,使用预处理器进行条件编译

windows - Pango/开罗/Fontconfig : Making unicode font fallback/linking work properly in Windows

c++ - 将二维数组从 C++ 类传递给 CUDA 函数

c++ - 为什么内联声明不是不完整的类型?

c# - 如何将 int/double/string/int[] 类型的参数从 C# 传递到原生 C?

java - 是否有像 Perl 5 的 Text::Unidecode 这样的 Java 库?

javascript - 是否可以对同一元素使用 2 种不同的字体,一种用于英语,另一种用于泰米尔语(unicode)