Board logo

标题: [数值计算] 批处理如何实现进制转换后区后14位? [打印本页]

作者: tanghow    时间: 2011-6-23 19:26     标题: 批处理如何实现进制转换后区后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]
作者: caruko    时间: 2011-6-23 20:44

只有2位的16进制, 直接  num/16 ++ num %% 16 然后把 10替换为A,15替换为F。
转换成2进制,移位再%2,组合成二进制字符串。
至于取后14位,更简单,直接 num %% 2^14 。
作者: caruko    时间: 2011-6-23 21:08

中间的一堆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!。
复制代码

作者: CrLf    时间: 2011-6-23 22:15

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

转帖:
  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
作者: tanghow    时间: 2011-6-27 23:47

我想要的是随便输入一个值就能计算这个数值,而不是算5-251=38.请帮忙再加一段请输入的程序好么
作者: HAT    时间: 2011-6-28 20:03

  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
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2