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

[数值计算] 二进制换算成16进制后结果输出问题

[复制链接]
发表于 2020-8-14 13:43:16 | 显示全部楼层 |阅读模式
还请大神帮忙看看,我想让任意MAC地址+1,如这个变变量%mac%为F825A3BCF203,下一个就是F825A3BCF204
我是先拆分,再计算,再合并的方式
  1. @echo on
  2. echo %mac%
  3. echo set a=%mac:~0,8% > a.bat   -----取前8位
  4. echo set b=%mac:~-4% > b.bat   -----取后四位   F203
  5. call b.bat
  6. set /a c=0x%b%+1      备注 F203+1
  7. echo %c%   备注结果 61956
  8. set f=0123456789ABCDEF
  9. set num=%c%
  10. :a
  11. set /a mod = %num% %% 16
  12. set /a num /=16
  13. set en=%mod% %en%   
  14. if not %num% lss 1 (goto a)
  15. for %%i in (%en%) do (call set/p=%%f:~%%i,1%%<nul)
  16. pause>nul
复制代码
显示结果是by 行输出单个字符,如下,

我怎么实现其输出为F204,再合并成MAC呢,求赐教,小白一枚!~~~~~~
发表于 2020-8-14 15:04:07 | 显示全部楼层
用javascript,方便不易出错
  1. @echo off
  2. set "MAC=F825A3BCF203"
  3. call :HexCalc  %MAC% +1 result
  4. echo %result%
  5. pause&exit

  6. :HexCalc
  7. set "code=mshta "javascript:new ActiveXObject("Scripting.FileSystemObject").GetStandardStream(1).WriteLine((parseInt('%~1',16)%2).toString(16).toUpperCase());window.close();""
  8. for /f "delims=" %%i in ('%code%') do set "%~3=%%i"
  9. goto :eof
复制代码

评分

参与人数 1技术 +1 收起 理由
smtcao008 + 1 超出了我入门批处理的认知了,但是可运行并 ...

查看全部评分

 楼主| 发表于 2020-8-14 15:23:11 | 显示全部楼层
回复 2# went


    这个是我看不懂系列却可实行的方法,感谢大神!
发表于 2020-8-14 17:56:27 | 显示全部楼层
本帖最后由 a20150604 于 2020-8-14 18:01 编辑

纯批:
  1. @echo off & setlocal enabledelayedexpansion
  2. set "MAC=F825A3BCF203"

  3. if 0x%MAC:~-6%==0xFFFFFF (
  4.     set /a "h6=0x%MAC:~0,6% + 1"
  5.     call :dec2hex h6 !h6!
  6.     set "result=!h6:~-6!000000"
  7. ) else (
  8.     set /a "l6=0x%MAC:~-6% + 1"
  9.     call :dec2hex l6 !l6!
  10.     set "result=%MAC:~0,6%!l6:~-6!"
  11. )
  12. set result
  13. pause
  14. exit

  15. :dec2hex hex dec
  16. setlocal
  17. set "dic=0123456789ABCDEF"
  18. for /L %%a in (0 1 7) do (
  19.     set /a "t = ( %~2 >> (4*%%a) ) & 0xF"
  20.     for %%p in (!t!) do set "hex_num=!dic:~%%p,1!!hex_num!"
  21. )
  22. endlocal & set "%1=%hex_num%
  23. exit /b
复制代码

评分

参与人数 1技术 +1 收起 理由
smtcao008 + 1 我试试 ,感谢!

查看全部评分

发表于 2020-8-14 19:34:42 | 显示全部楼层
  1. powershell (0xF825A3BCF203+1).toString('X')
复制代码
 楼主| 发表于 2020-8-15 14:16:49 | 显示全部楼层
回复 2# went


    如果MAC前面是00开头的 输出结果就会少开头的00两位数
如MAC为 002B6341B075, +1后输出2B6341B076,可优化吗?
发表于 2020-8-15 18:04:33 | 显示全部楼层
  1. @echo off & setlocal enabledelayedexpansion
  2. set "mac=002B6341B075"
  3. set /a x = 1

  4. for /L %%i in (6 6 12) do (
  5.     set /a y = 0x!mac:~-%%i, 6! + x, x = y / 0x1000000
  6.     cmd /c exit !y!
  7.     set "result=!=ExitCode:~2!!result!"
  8. )

  9. echo;!result!
  10. pause
复制代码

评分

参与人数 2技术 +2 收起 理由
老刘1号 + 1 这方法绝了
a20150604 + 1 我都忘记了 =ExitCode

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 20:30 , Processed in 0.029957 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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