如何在C++中使用wprintf输出宽字符的ASCII值?
解决wstring单个字符ASCII值打印问题
你的代码存在两个关键错误:
- 第二个参数传递了
ws2.c_str(),这是宽字符串的指针,%i会将指针的内存地址当作整数输出,所以你看到的是随机大数字而非字符的实际数值; %ls用于输出完整宽字符串,若要打印单个宽字符,应该使用%lc格式符。
正确实现方式
- 提取单个宽字符:
std::wstring的元素类型是wchar_t,直接通过ws2[0]或ws2.at(0)获取第一个字符即可。 - 打印字符与对应数值:用
%lc输出单个宽字符,将wchar_t强制转换为整数后,用%d打印其十进制数值。
示例代码
#include <string> #include <cstdio> int main() { std::wstring ws2 = L"Ö"; wprintf(L"This is wprintf for int: %lc(%d)...\n", ws2[0], static_cast<int>(ws2[0])); return 0; }
编码说明
Ö的ASCII值214是Latin-1(ISO-8859-1)编码下的数值,而wchar_t在Windows环境中为UTF-16、Linux环境中为UTF-32,这两种编码里Ö的十进制数值均为214(十六进制0xD6),因此直接提取ws2[0]的数值就能得到目标结果。若需处理其他编码转换场景,可使用专门的编码转换工具(如iconv)。
内容的提问来源于stack exchange,提问作者user3443063
相关产品推荐
相关产品推荐

