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

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

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

这可能吗?

c++ hex
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.