我想將字符串轉換爲數字以便在中使用SCP命令。有人可以幫忙嗎?在tcl中將IP地址轉換爲數字
set ip "192.168.1.2"
scp:[email protected]$ip//etc/dev/
它不會用我設置的IP替換$ip
。
如何將IP轉換爲編號,因爲scp命令需要的是數字而不是字符串。
謝謝
我想將字符串轉換爲數字以便在中使用SCP命令。有人可以幫忙嗎?在tcl中將IP地址轉換爲數字
set ip "192.168.1.2"
scp:[email protected]$ip//etc/dev/
它不會用我設置的IP替換$ip
。
如何將IP轉換爲編號,因爲scp命令需要的是數字而不是字符串。
謝謝
你會想要一個庫來做到這一點。 tcllib有IP address manipulation module:
package require ip
set ip "192.168.1.2"
set num [ip::toInteger $ip]
puts $num
puts [ip::intToString $num]
-1062731518
192.168.1.2
這看起來很奇怪:scp:[email protected]$ip//etc/dev/
回想一下,Tcl對這命令,如command word ...
,並有在 「SCP」 命令中沒有空格,所以TCL將嘗試找到一個名爲「scp:[email protected]//etc/dev/」的命令 - 我打賭它找不到一個。
這不是關於將任何字符串轉換爲數字,而是將其轉換爲IP地址。在Tcl 大多數所有內容都是一個字符串,所以你只需要使用expr命令進行數學計算,它將根據需要進行轉換。請注意我在expr
以下的實現中如何簡單地引用[lindex $octets $i]
這是從分割IP地址派生的字符串,但該命令仍按預期方式運行。
下面是你真正要求的一個天真的實現:將IP地址轉換爲數字(整數);你會希望通過各種驗證(段數組的長度,每個段的最小/最大值等)來增強它 - 這就是爲什麼在另一個答案中建議的庫可能是更好的方式,更不用說可能存在配備處理ipv6,我簡單地忽略;)
Here's an explanation of the implementation in general;請任何人隨意編輯一個更好的。關於我的實現的一個註釋:通過顛倒這個列表,我使得將最後一個八位字節乘以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