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

[数值计算] 批处理如何实现进制转换后区后14位?

将一个由3部分组成的10进制数(例如5-251-38)转换成16进制的数(例如05FB26),然后将这个16进制的数字转换成2进制的数(例如1011111101100100110),然后取这个2进制数字的后14位,将这个14位的2进制数转换成10进制的结果,请问批处理语言怎样实现上述功能啊,(PS:输入的那个由3部分组成的10进制数每一部分都不会大于256),请帮忙,谢谢
联系方式:[email]tanghow@sina.com[/email]
noob

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p s=请输入一个由3部分组成的10进制数(例如5-251-38):
  4. for /f "tokens=1,2,3 delims=-" %%a in ("!s!") do (
  5.     set /a "n=%%a*256*256+%%b*256+%%c"
  6. )
  7. set /a "n=n&0x3FFF"
  8. echo,!n!
  9. pause
复制代码

TOP

我想要的是随便输入一个值就能计算这个数值,而不是算5-251=38.请帮忙再加一段请输入的程序好么
noob

TOP

我不明白,楼主在批处理吧发的那帖不是已经有答案了吗?为何发信息说不正确?

转帖:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "s=5-251-38"
  4. for /f "tokens=1,2,3 delims=-" %%a in ("!s!") do (
  5. set /a "n=%%a*256*256+%%b*256+%%c"
  6. )
  7. set /a "n=n&0x3FFF"
  8. echo !n!
  9. pause
复制代码
链接:http://tieba.baidu.com/f?kz=1117011079   4楼  作者:liuzhaonan11

TOP

中间的一堆2进制就不计算了,直接计算最终结果。
  1. @ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
  2. if "%1"=="" (
  3.     set /p input=请输入:
  4. ) else (
  5.     set "input=%~1"
  6. )
  7. set "str=0123456789ABCDEF"
  8. for /f "tokens=1-3 delims=- " %%a in ("!input!") do (
  9.     set /a a1=%%a/16,a2=%%a %% 16,b1=%%b/16,b2=%%b %% 16,c1=%%c/16,c2=%%c %% 16
  10.     for %%i in (!a1! !a2! !b1! !b2! !c1! !c2!) do set "num=!num!!str:~%%i,1!"
  11. )
  12. echo,这是16进制数!num!。
  13. set /a code=0x!num! %% (1"<<"14)
  14. echo,这是后14位的10进制数!code!。
复制代码

TOP

只有2位的16进制, 直接  num/16 ++ num %% 16 然后把 10替换为A,15替换为F。
转换成2进制,移位再%2,组合成二进制字符串。
至于取后14位,更简单,直接 num %% 2^14 。

TOP

返回列表