[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 二进制换算成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呢,求赐教,小白一枚!~~~~~~
小Z

用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

评分人数

    • smtcao008: 超出了我入门批处理的认知了,但是可运行并 ...技术 + 1

TOP

回复 2# went


    这个是我看不懂系列却可实行的方法,感谢大神!
小Z

TOP

本帖最后由 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

评分人数

TOP

  1. powershell (0xF825A3BCF203+1).toString('X')
复制代码
QQ 33892006

TOP

回复 2# went


    如果MAC前面是00开头的 输出结果就会少开头的00两位数
如MAC为 002B6341B075, +1后输出2B6341B076,可优化吗?
小Z

TOP

  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

评分人数

TOP

返回列表