gpt4 book ai didi

c++ - C 弦到宽 C 弦

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:53:45 28 4
gpt4 key购买 nike

我敢肯定这个问题被问了很多,但我只是想确保没有更好的方法来做到这一点。

基本上,我有一个 const char* 指向一个以 null 结尾的 C 字符串。我有另一个函数,它需要一个指向具有相同字符的字符串的 const wchar_t*。

目前,我一直在尝试这样做:

    size_t newsize = strlen(myCString) + 1;
wchar_t * wcstring = new wchar_t[newsize];
size_t convertedChars = 0;

mbstowcs_s(&convertedChars, wcstring, newsize, myCString, _TRUNCATE);

delete[] wcstring;

我需要在很多地方进行这些转换,因为我正在处理需要一个或另一个的第 3 方库。这是解决此问题的推荐方法吗?

最佳答案

假设您的数据全部为 ASCII,您正在做的几乎是推荐的做法。如果你有非 ASCII 数据,你需要知道它的编码是什么:UTF-8、Windows-1252、任何 ISO 8859 变体、SHIFT-JIS 等。每个都需要以不同的方式转换.

我唯一要更改的是使用 mbstowcs 而不是 mbstowcs_smbstowcs_s 仅在 Windows 上可用,而 mbstowcs 是可移植的标准 C99 函数。当然,如果您想在不完全关闭 Microsoft 编译器的情况下避免 CRT 弃用警告,那么使用 #if 测试宏来使用 mbstowcs 在非 Windows 系统上和 mbstowcs_s 在 Windows 系统上。

您还可以使用 mbstowcs 通过首先为目标传递 NULL 来获取转换后的字符串的长度。这样,无论输入字符串有多长,都可以避免截断;但是,它确实涉及将字符串转换两次。

对于非 ASCII 转换,我建议使用 libiconv .

关于c++ - C 弦到宽 C 弦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12961960/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com