如何在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的十六进制转义序列不在范围内。
现在我可以得出结论,十六进制不是显示字符串字符的好方法?
我有一种错的感觉,但不知道为什么。
有人可以解释十六进制是否可以使用以及如何使用?
十六进制转义序列变为\x65e
和\x653
,因此您需要帮助编译器在65
之后停止:
#include <iostream>
int main() {
std::cout << "b\145e" << std::endl;//1
std::cout << "b\x65""e" << std::endl;//2
}
实际上在字符串文字的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;