如何将十六进制值转换为“标准”IP 地址?

Fre*_*nez 2 networking ip

如何在没有在线转换器的情况下手动将十六进制值转换为 IP 地址?

例如,正常 IP 点符号中的 80D00297 是什么?

Joh*_*024 5

使用 sed 和 bash

$ printf '%d.%d.%d.%d\n' $(echo 80D00297 | sed 's/../0x& /g')
128.208.2.151
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

使用 GNU awk

$ echo 80D00297 | gawk --non-decimal-data '{for (i=1;i<=NF;i++) printf "%d%s","0x"$i,(i==NF?"\n":".")}' FPAT='..' 
128.208.2.151
Run Code Online (Sandbox Code Playgroud)

这用于FPAT='..'将输入分成两个字符字段。然后我们循环遍历每个字段,0x在它前面放一个,并printf%d格式输入它,以便将十六进制数转换为十进制数。

上面一个看似复杂的部分是三元语句(i==NF?"\n":".")。如果我们在最后一个字段,则此语句返回一个换行符i==NF。对于 的其他值i,它返回一个句点.。这样,数字用句点分隔,但最后一个数字后跟一个换行符。

  • 可能是由于与字节序有关的原因,但这对我来说颠倒了顺序,所以我不得不将其修改为 `sed 's/../0x&amp;\n/g' | tac`。 (2认同)