C语言 下面的格式说明符在做什么?


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个字符。

最新更新