我正在尝试将十六进制字符显示为ASCII,但是\ x00之后它被截断了。我了解\ x00表示NULL,但是有某种方法可以“跳过”该值并显示所有十六进制值吗?
int main ()
{
const char* blob = "\x31\x00\x32";
std::cout <<"hexChar=" << blob << std::endl;
return 0;
}
输出为:
hexChar=1
我希望输出还包括最后一个字符,即2(0x32):
hexChar=1 2
这可能吗?
答案 0 :(得分:2)
问题在于NUL终止的字符串(这是每个人都理解的const char *
,没有明确的长度),是由NUL终止的。因此,您的字符串只有一个字符,并且只能打印一个字符-'\x32'
字符在内存中时不属于字符串。根据定义,这样的字符串不能包含'\x00'
字符,因为它会终止该字符串。
您将需要使用其他可以包含NUL的表示形式,例如std::string
:
int main ()
{
std::string blob("\x31\x00\x32", 3);
std::cout <<"hexChar=" << blob << std::endl;
return 0;
}