else
{
printf("\%.3hho", *data);
}
我无法在网上或通过阅读C编程语言书籍找到关于如何破译它的信息。我在下面的代码片段中看到了它。该代码试图在telnet协议中执行密码嗅探。
if ((pktlen - sizeof(struct ipheader)) > dataoffset)
{
printf(" SrcIP: %s,", inet_ntoa(ip->iph_sourceip));
printf(" DstIP: %s,", inet_ntoa(ip->iph_destip));
printf(" Data: ");
u_char* data = (u_char*)tcp + dataoffset;
for (unsigned short s = 0; s < (ntohs(ip->iph_len) - (sizeof(struct ipheader) + dataoffset)); s++)
{
if (isprint(*data) != 0)
{
printf("%c", *data);
}
else
{
printf("\%.3hho", *data);
}
data++;
}
printf("n");
}
}
根据CppReference:
转换说明符
o
转换无符号整数八进制表示oooo,
Precision指定要出现的最小位数。& lt; truncated>
所以字符串\%.3hho
表示一个文字反斜杠(它被转义了),加上格式说明符%.3hho
:
%...o
表示无符号整数的八进制表示。字母o
也表示此说明符 的结束。hh
是C99规范,表示unsigned char
而不是unsigned int
,始终为单字节.3
表示精度为3,因此至少有3个八进制数字(000 - 377)
%o
格式说明符以八进制形式输出无符号值。hh
长度修饰符告诉它该值是char
,.3
精度意味着将至少打印3个字符。