如何在C ++中使用std :: cout以十六进制正确显示字符串文字?

问题描述 投票:0回答:2

如何在C ++中使用std :: cout以十六进制正确显示字符串文字?

我想使用八进制和十六进制在C ++中使用std :: cout打印字符串文字。

我要打印“蜜蜂”。

#include <iostream>
int main() {
    std::cout << "b\145e" << std::endl;//1
    std::cout << "b\x65e" << std::endl;//2
    return 0;
}

// 1正常,但是// 2的十六进制转义序列不在范围内。

现在我要打印“ be3”。

#include <iostream>
int main() {
    std::cout << "b\1453" << std::endl;//1
    std::cout << "b\x653" << std::endl;//2
    return 0;
}

此外,// 1效果很好,但是// 2的十六进制转义序列不在范围内。

现在我可以得出结论,十六进制不是显示字符串字符的好方法

我有一种错的感觉,但不知道为什么。

有人可以解释十六进制是否可以使用以及如何使用?

c++ c hex escaping cout
2个回答
0
投票

十六进制转义序列变为\x65e\x653,因此您需要帮助编译器在65之后停止:

#include <iostream>

int main() {
    std::cout << "b\145e" << std::endl;//1
    std::cout << "b\x65""e" << std::endl;//2
}

0
投票

实际上在字符串文字的cppreference的documentation上有一个完全相同的情况的示例。

如果有效的十六进制数字在字符串文字中跟随十六进制转义符,则它将无法编译为无效的转义序列。字符串串联可以用作解决方法:

他们提供以下示例:

// const char* p = "\xfff"; // error: hex escape sequence out of range
const char* p = "\xff""f";  // OK   : the literal is const char[3] holding {'\xff','f','\0'}

将它们解释的内容应用于您的问题,我们可以通过两种方式打印字符串文字be3

std::cout << "b\x65" "3" << std::endl;
std::cout << "b\x65" << "3" << std::endl;
© www.soinside.com 2019 - 2024. All rights reserved.