在tcl中将IP地址转换为数字

在tcl中将IP地址转换为数字,tcl,ip-address,Tcl,Ip Address,我想将字符串转换为要在SCP命令中使用的数字。有人能帮忙吗 set ip "192.168.1.2" scp:root@$ip//etc/dev/ 它不会用我设置的ip替换$ip 如何将IP转换为数字,因为scp命令需要的是数字而不是字符串 谢谢你需要一个图书馆来做这件事。具有: 这看起来很奇怪:scp:root@$ip//etc/dev/ 回想一下,Tcl对命令进行求值,例如命令词…,并且“scp”命令中没有空格,因此Tcl将尝试查找名为“scp:root@192.168.1.2//etc/

我想将字符串转换为要在SCP命令中使用的数字。有人能帮忙吗

set ip "192.168.1.2"
scp:root@$ip//etc/dev/
它不会用我设置的ip替换
$ip

如何将IP转换为数字,因为scp命令需要的是数字而不是字符串


谢谢

你需要一个图书馆来做这件事。具有:

这看起来很奇怪:
scp:root@$ip//etc/dev/


回想一下,Tcl对命令进行求值,例如
命令词…
,并且“scp”命令中没有空格,因此Tcl将尝试查找名为“scp:root@192.168.1.2//etc/dev/“--我打赌它找不到。

这不是将任何字符串转换为数字,而是一个IP地址。在Tcl中,大部分内容都是字符串,因此您只需使用expr命令进行数学运算,它将根据需要进行转换。请注意,在我下面的实现中,在
expr
中,我只是引用了
[lindex$octets$I]
,这是一个从拆分IP地址派生的字符串,但命令仍按预期运行

下面是你真正想要的一个简单的实现:将一个IP地址转换成一个数字(整数);您可能希望通过各种验证(段数组的长度、每个段的最小/最大值等)来增强它——这就是为什么在另一个答案中建议的库可能是更好的方法,更不用说可能配备了用于处理ipv6的库,我只是忽略了它;)

);请任何人都可以随意编辑一个更好的。关于我的实现的一个注意事项:通过颠倒列表,我使最后一个八位字节乘以256^0、下一个八位字节乘以256^1等变得很简单,幂就是lindex

set ip "192.168.1.2"
set ip_as_int 0
set octets [lreverse [split $ip .]]

for {set i 0} {$i < 4} {incr i} {
    set ip_as_int [expr {256 ** $i * [lindex $octets $i] + $ip_as_int}]
}

puts $ip_as_int ;#3232235778   
设置ip“192.168.1.2”
将ip_设置为_int 0
设置八位字节[lreverse[split$ip.]]
对于{set i 0}{$i<4}{incr i}{
将ip_设置为int[expr{256**$i*[lindex$octets$i]+$ip_设置为int]
}
将$ip_作为_int#3232235778
-1062731518
192.168.1.2
set ip "192.168.1.2"
set ip_as_int 0
set octets [lreverse [split $ip .]]

for {set i 0} {$i < 4} {incr i} {
    set ip_as_int [expr {256 ** $i * [lindex $octets $i] + $ip_as_int}]
}

puts $ip_as_int ;#3232235778