wchar_t十六进制格式转换为 std::string

wchar_t to std::string in hex format

提问人: 提问时间:6/22/2022 更新时间:6/22/2022 访问量:511

问:

我正在尝试将 a 转换为十六进制,然后将其转换为 .wchar_tstd::string

这是我的代码:

#ifdef _DEBUG
    std::clog << wchar << std::endl;
#endif

    wchar_t wideChar = printf("0x%x", wchar);

#ifdef _DEBUG
    std::clog << wideChar << std::endl;
#endif

    std::string str = "";
    str.assign(wideChar, 4);

#ifdef _DEBUG
    std::clog << str << std::endl;
#endif

wchar 是 wchar_t 类型的变量,它具有动态值。在此示例中,我使用的值为 69,它相当于 E 键。

首先,我将 wchar 转换为另一个wchar_t,这个 wideChar 包含十六进制值。这符合预期,只是它还有一个我不需要/不想要的角色。

最后,我试图将宽字符转换为字符串,但失败得很厉害。这背后的想法是我只需要十六进制数的前 4 个字母(比如0x45而不是0x454)。

输出示例:

69
0x454
♦♦♦♦

我遇到的最大问题是字符串中只有这个奇怪的符号。我想将 wchar 完全按原样转换为字符串,但我想删除最后一个字符。

所需的输出应为:

69
0x454
0x45

有人可以告诉我我的代码做错了什么,以及我如何才能正确地做到这一点。提前致谢。

c++ 字符串 char std wchar

评论

2赞 Ted Lyngmo 6/22/2022
wchar_t wideChar = printf("0x%x", wchar);?什么?返回传输到输出流的字符数。printf
0赞 Marek R 6/22/2022
哪个站台?Note 在 Windows 上有 16 位,在 POSIX 上有 32 位。wchar_t
0赞 Marek R 6/22/2022
godbolt.org/z/WqxcrW4dr

答:

0赞 Ted Lyngmo 6/22/2022 #1

这:

str.assign(wideChar, 4);

使用此重载:

constexpr basic_string& assign( size_type count, CharT ch );

由于您分配了传输到的字符数stdout

wchar_t wideChar = printf("0x%x", wchar);

to ,则为 ( 使其成为 4 个字符)。wideCharwideChar40x45

因此,您为字符串分配了四个 s,使其成为 .char(4)"\004\004\004\004"