将 TCHAR 数组转换为 char 数组

发布于 2024-08-12 03:02:36 字数 57 浏览 4 评论 0原文

如何将 TCHAR[] 转换为 char[]

How to convert to TCHAR[] to char[] ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

青衫儰鉨ミ守葔 2024-08-19 03:02:36

老实说,我不知道如何使用数组,但是使用指针,微软为我们提供了一些API,例如 wctombwcstombs.第一个比第二个安全性低。所以我认为你可以通过一个数组到指针和一个指针到数组的转换来实现你想要实现的目标,例如:

// ... your includes
#include <stdlib.h>
// ... your defines
#define MAX_LEN 100
// ... your codes
// I assume there is no any defined TCHAR array to be converted so far, so I'll create one
TCHAR c_wText[MAX_LEN] = _T("Hello world!");
// Now defining the char pointer to be a buffer for wcstomb/wcstombs
char c_szText[MAX_LEN];
wcstombs(c_szText, c_wText, wcslen(c_wText) + 1);
// ... and you're free to use your char array, c_szText

PS:这可能不是最好的解决方案,但至少它是有效的。

Honestly, I don't know how to do it with arrays but with pointers, Microsoft provides us with some APIs, such as wctomb and wcstombs. First one is less secure than the second one. So I think you can do what you want to achieve with one array-to-pointer and one pointer-to-array casting like;

// ... your includes
#include <stdlib.h>
// ... your defines
#define MAX_LEN 100
// ... your codes
// I assume there is no any defined TCHAR array to be converted so far, so I'll create one
TCHAR c_wText[MAX_LEN] = _T("Hello world!");
// Now defining the char pointer to be a buffer for wcstomb/wcstombs
char c_szText[MAX_LEN];
wcstombs(c_szText, c_wText, wcslen(c_wText) + 1);
// ... and you're free to use your char array, c_szText

PS: Could not be the best solution but at least it's working and functional.

权谋诡计 2024-08-19 03:02:36

TCHAR 是 Microsoft 特定的 typedef,用于 charwchar_t(宽字符)。

转换为 char 取决于它实际上是其中的哪一个。如果 TCHAR 实际上是一个 char,那么您可以进行简单的转换,但如果它确实是一个 wchar_t,您将需要一个例程来在字符集之间进行转换。请参阅函数 MultiByteToWideChar()< /代码>

TCHAR is a Microsoft-specific typedef for either char or wchar_t (a wide character).

Conversion to char depends on which of these it actually is. If TCHAR is actually a char, then you can do a simple cast, but if it is truly a wchar_t, you'll need a routine to convert between character sets. See the function MultiByteToWideChar().

挽清梦 2024-08-19 03:02:36

为什么不直接使用 wcstombs_s

下面的代码显示了它是多么简单。

#define MAX_LENGTH 500
...

TCHAR szWideString[MAX_LENGTH];
char szString[MAX_LENGTH];
size_t nNumCharConverted;
wcstombs_s(&nNumCharConverted, szString, MAX_LENGTH,
        szWideString, MAX_LENGTH);

Why not just use wcstombs_s ?

Here is the code to show how simple it is.

#define MAX_LENGTH 500
...

TCHAR szWideString[MAX_LENGTH];
char szString[MAX_LENGTH];
size_t nNumCharConverted;
wcstombs_s(&nNumCharConverted, szString, MAX_LENGTH,
        szWideString, MAX_LENGTH);
傲性难收 2024-08-19 03:02:36

它取决于字符集(Unicode 或 ANSI)(wchar_t 或 char),因此如果您使用 ANSI,则 TCHAR 将是 char 而不进行任何转换,但对于 Unicode,您必须从 wchar_t 转换为 char,您可以使用 WideCharToMultiByte

It depends on the character set (Unicode or ANSI) (wchar_t or char), so if you are using ANSI simply TCHAR will be char without any casting, but for Unicode, you have to convert from wchar_t to char, you can use WideCharToMultiByte

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文