Chinaunix

标题: [求助]/proc/net/route 下十六进制IP地址问题 [打印本页]

作者: cltnet    时间: 2007-11-02 12:15
标题: [求助]/proc/net/route 下十六进制IP地址问题
请问一下我cat /proc/net/route
下面的IP地址是一十六进制显示的。。。比如CA66E001
我怎么使用shell把他转换为十进制格式显示呢?谢谢
作者: cltnet    时间: 2007-11-02 12:18
麻烦大家帮帮忙。。。。在此谢谢大家了
作者: yuhe27913    时间: 2007-11-02 12:38
两个问题怎么不一起问?
http://bbs.chinaunix.net/thread-1010691-1-1.html


鄙视
作者: yuhe27913    时间: 2007-11-02 12:41
bc

echo 'obashe=10;ibase=16;7D'|bc
作者: waker    时间: 2007-11-02 13:06
printf "%d.%d.%d.%d\n" $(echo CA66E001|sed '/../s// 0x&/g')
作者: cltnet    时间: 2007-11-02 13:16
原帖由 yuhe27913 于 2007-11-2 12:38 发表
两个问题怎么不一起问?
http://bbs.chinaunix.net/thread-1010691-1-1.html


鄙视

不好意思。。。开始想读出来后自己转换。。。后发现自己的方法循环次数太多。。。才又不发问。。。不好意思了
作者: cltnet    时间: 2007-11-02 13:17
原帖由 waker 于 2007-11-2 13:06 发表
printf "%d.%d.%d.%d\n" $(echo CA66E001|sed '/../s// 0x&/g')

斑竹你这个方式很简洁。。。。太感谢了。。。。

谢谢大家的帮助。。。。谢谢
作者: springwind426    时间: 2007-11-02 13:33
注意:
/proc/net/route中的网络地址是 (网络序整数,即低位在前,高位在后)


  1. a=0xCA66E001; echo $((a&255)).$((a>>8&255)).$((a>>16&255)).$((a>>24&255))
复制代码

作者: 寂寞烈火    时间: 2007-11-02 13:43
/home/lee#str=0302943D
/home/lee#eval echo $((16#${str:0:2})).$((16#${str:2:2})).$((16#${str:4:2})).$((16#${str:6:2}))
3.2.148.61
作者: cltnet    时间: 2007-11-02 14:08
原帖由 waker 于 2007-11-2 13:06 发表
printf "%d.%d.%d.%d\n" $(echo CA66E001|sed '/../s// 0x&/g')


我使用斑竹上名这条shell 命令怎么出现。。。
printf "%d.%d.%d.%d\n" $(echo CA66E001|sed '/../s// 0x&/g')
0xCA0x660xE00x01-1.-1.-1.-1 错误呢?
作者: ly5066113    时间: 2007-11-02 14:29
原帖由 cltnet 于 2007-11-2 14:08 发表


我使用斑竹上名这条shell 命令怎么出现。。。
printf "%d.%d.%d.%d\n" $(echo CA66E001|sed '/../s// 0x&/g')
0xCA0x660xE00x01-1.-1.-1.-1 错误呢?


printf "%d.%d.%d.%d\n" "$(echo CA66E001|sed 's/../ 0x&/g')"

这样试试
作者: cltnet    时间: 2007-11-02 14:40
原帖由 ly5066113 于 2007-11-2 14:29 发表


printf "%d.%d.%d.%d\n" "$(echo CA66E001|sed 's/../ 0x&/g')"

这样试试

printf "%d.%d.%d.%d\n" "$(echo CA66E001|sed 's/../ 0x&/g')"
0xCA 0x66 0xE0 0x01-1.-1.-1.-1

还是一样的错误提示。。。。
作者: cjaizss    时间: 2007-11-02 15:27
A=ABCDEF
printf "%d\n" 0x$A
作者: cjaizss    时间: 2007-11-02 15:35
原帖由 cltnet 于 2007-11-2 14:40 发表

printf "%d.%d.%d.%d\n" "$(echo CA66E001|sed 's/../ 0x&/g')"
0xCA 0x66 0xE0 0x01-1.-1.-1.-1

还是一样的错误提示。。。。

printf "%d.%d.%d.%d\n" "$(echo CA66E001|sed 's/../ 0x&/g')"是错的
应该
printf "%d.%d.%d.%d\n" $(echo CA66E001|sed 's/../ 0x&/g')
作者: cltnet    时间: 2007-11-03 11:16
原帖由 cjaizss 于 2007-11-2 15:35 发表

printf "%d.%d.%d.%d\n" "$(echo CA66E001|sed 's/../ 0x&/g')"是错的
应该
printf "%d.%d.%d.%d\n" $(echo CA66E001|sed 's/../ 0x&/g')



我最开始就是使用的printf "%d.%d.%d.%d\n" $(echo CA66E001|sed 's/../ 0x&/g')这个命令。。。
但是在十六进制转换为十进制时不能正确转换。。。

但是我使用printf "%g.%g.%g.%g\n" $(echo CA66E001|sed 's/../ 0x&/g')它就能正确转换。。。

我分别试了FFFFFFFF 和00000000使用上面的shell命令都可以转换。。。。至少在我转换IP地址时他还暂时能满足我的需求。。。

有没有其他的问题就还不知道了。。。暂时还没有发现

但我使用echo $((0xCA)) 这个shell命令转换十六进制为十进制是确能正确转换?有点不明白。。。。为什么上面的不能转换。。下面这条命令确能转换呢?

在此谢谢大家无私的帮助。。。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2