当我遇到一些我以前没见过的东西时,我正在查看strace
电话的输出。示例输出如下(从调用recv
到详细说明):
recv(13, "%\0\0\0\23\0\1\0\5\0\0\0\0\0\0\0\0\0\0\0\26\0\0\0\0\0\0\0\0\0\0\0\5\0\20\0\5", 37, 0)
其他结果如下:
recv(10, "OK\n", 3, 0)
无论实际的recv意图传达什么,我都注意到发送的每个字符都被转义了。我认为也许这些转义字符与ASCII Table以一对一的方式相关(即\10
等同于\n
)。
所以,快速测试如下:
printf("Before newline \10 After newline);
给出以下结果:
Before newline After newline
然后我尝试以十进制形式打印字符本身的值:
printf("Value: %d", '\10');
给出结果:
Value: 8
所以,当然,因为差异是我试过的两个:
printf("Before newline \12 After newline);
产地:
Before newline
After newline
因此,似乎这种格式的转义字符做与ascii表相关,其中"少于2"关系。
为什么ascii表和转义字符之间存在两个差异?
这有什么意义,为什么它会以这种方式运作?
这只是strace
的细微差别吗?
答案 0 :(得分:2)
转义字符不以十进制编码。它是一到三位数的八进制数字。
C有几种形式的字符转义:
'\n'
,' \r'
等。)'\377'
)x
,然后是十六进制数字(即'\x40'
)u
,然后是十六进制数字(Unicode常量) 10
是十进制的8
,因此是你的结果。没有一个"少于两个"但是,因为20
八进制是16
十进制,30
八进制是24
十进制等等。
答案 1 :(得分:1)
strace
使用标准的C字符串表示法,其中后跟数字的反斜杠是 octal 字符代码。
10八进制= 8十进制
12八进制= 10十进制