返回列表 发帖

[数值计算] 批处理如何实现进制转换后区后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

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

TOP

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

TOP

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

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

TOP

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

TOP

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

TOP

返回列表