我正在尝试将十六进制字符显示为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
这可能吗?
问题是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;
}