Answers:
这是正在发生的事情:
$ printf "%d\n" 047
39
047
八进制是39
十进制。
您只需要放弃领导0
。
猜测是由于iptables中的某些内容将IPv4地址拆分为4个十进制数字,因此它可以将IP字符串表示形式转换为long。但这是推测。
inet_addr aka inet_aton
它需要产生效果strtol(,,0)
inet_aton
还接受其他几种不太常用的形式(手册实际上甚至描述了它们):
octal:
020.0.1.22 -> 16.0.1.22
hexadecimal:
0x10.0.1.22 -> 16.0.1.22
combination:
020.0.1.0x16 -> 16.0.1.22
bottom two bytes together (old Class B)
16.0.278 -> 16.0.1.22
bottom three bytes together (old Class A)
16.278 -> 16.0.1.22
all in one, hex
0x10000116 -> 16.0.1.22
all in one, decimal (completely unreadable)
268435734 -> 16.0.1.22
this should be simple
0020.0426 -> ...
他们也可能在网络浏览器上工作。
以零开头的八进制数和以十六进制数开头的前缀0x
至少与C语言一样古老。
strtol()
功能:“ 八进制常量由前缀0
任选地随后的数字序列0
来7
唯一 ”。