尝试显示ASCII字符串但被截断

时间:2019-04-17 03:04:41

标签: c++ hex

我正在尝试将十六进制字符显示为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

这可能吗?

1 个答案:

答案 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;
}