找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27610|回复: 9

[文本处理] 数字格式ip转换格式的问题

[复制链接]
发表于 2021-2-1 11:58:54 | 显示全部楼层 |阅读模式
数字格式的ip地址转换成带点的格式,
批处理可以做到吗?
发表于 2021-2-1 12:12:31 | 显示全部楼层
回复 1# netdzb


你需要先搞清楚转换逻辑才行,比如给定一个数字:
1111111111
先不要谈用哪种脚本,就让你先手工转换,你咋知道正确的IP应该是哪个?
 楼主| 发表于 2021-2-1 13:01:49 | 显示全部楼层
本帖最后由 netdzb 于 2021-2-1 13:07 编辑

回复 2# Batcher

转换逻辑是这样的,python的描述

print(96*256*256*256+23*256*256+122*256+178)
iptest = '96.23.122.178'
ip = iptest.split('.')
print(ip)

1612151474
['96', '23', '122', '178']
发表于 2021-2-1 13:06:23 | 显示全部楼层
本帖最后由 Gin_Q 于 2021-2-1 13:09 编辑

回复 3# netdzb


你这是字符串分割不是逻辑! 你要知道什么规则去分割,比如你说的按点。但是纯数字没有点。
 楼主| 发表于 2021-2-1 13:09:52 | 显示全部楼层
回复 4# Gin_Q


第一行就是转换逻辑啊。
分割后的列表能够倒序读入吗?因为乘以256的次数和游标需要调整的。
发表于 2021-2-1 13:33:14 | 显示全部楼层
你的顺序应该是反的
  1. @echo off & cd /d "%~dp0"
  2. setlocal enabledelayedexpansion
  3. set "ip="
  4. set "num=1612151474"
  5. for /l %%i in (1,1,4) do (
  6.         set /a "num1=num>>8<<8"
  7.         set /a "num1=num-num1"
  8.         set /a "num=num>>8"
  9.         set "ip=!ip!.!num1!"
  10. )
  11. set "ip=!ip:~1!"
  12. echo !ip!
  13. pause&exit
复制代码
 楼主| 发表于 2021-2-1 13:46:25 | 显示全部楼层
回复 6# went

原来批处理也有移位操作的啊,学到了,谢谢。
发表于 2021-2-1 14:58:51 | 显示全部楼层
  1. def con(n):
  2.     res = []
  3.     res.append(str(n >> 24))
  4.     res.append(str((n & 0x00FFFFFF) >> 16))
  5.     res.append(str((n & 0x0000FFFF) >> 8))
  6.     res.append(str(n & 0x000000FF))
  7.     return '.'.join(res)
  8.    
  9. print(con(96*256*256*256+23*256*256+122*256+178))
复制代码
发表于 2021-2-1 16:24:43 | 显示全部楼层
本帖最后由 flashercs 于 2021-2-1 16:25 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "ip="
  4. :: ip=192.168.1.1
  5. set /a "num=-1062731519"
  6. set /a "num1=num"
  7. for /l %%A in (1,1,4) do (
  8.   set /a "byte=num1&255"
  9.   set "ip=!byte!.!ip!"
  10.   set /a "num1>>=8"
  11. )
  12. set "ip=!ip:~,-1!"
  13. echo num=!num!
  14. echo ip=!ip!
  15. endlocal
  16. pause
  17. exit /b
复制代码
 楼主| 发表于 2021-2-2 07:51:35 | 显示全部楼层
回复 8# Gin_Q

python 3.8的新特性:=你用过吗?

ip_list = '192.168.0.1'.split('.')
base = 1
sum(int(x) * (base := base * 256) for x in reversed(ip_list)) // 256
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 12:47 , Processed in 0.015951 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表