首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在cmd.exe批处理文件中格式化十六进制序列

在cmd.exe批处理文件中格式化十六进制序列
EN

Stack Overflow用户
提问于 2015-10-06 03:59:44
回答 2查看 2.7K关注 0票数 2

在Windows脚本(又名bat脚本)中,我有一个从1到8的对于/L循环,其中我需要做一点移位,并以某种方式将变量格式化为十六进制数(如果您问这个数字,它是单个CPU标识符位到/AFFINITY)。

我不知道怎么做最后一步。这是我的loop.cmd文件:

代码语言:javascript
复制
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /L %%i IN (1,1,8) DO (
    SET /A "J=1<<%%i"
    ECHO %%i and !J!
)

它除了格式化十六进制数字之外,什么都做:

代码语言:javascript
复制
1 and 2
2 and 4
3 and 8
4 and 16
5 and 32
6 and 64
7 and 128
8 and 256

预期产出如下:

代码语言:javascript
复制
1 and 2
2 and 4
3 and 8
4 and 10
5 and 20
6 and 40
7 and 80
8 and 100

如何格式化十六进制数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-06 10:13:31

代码语言:javascript
复制
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /L %%i IN (1,1,8) DO (
    SET /A "J=1<<%%i"
    CALL :DECTOHEX J
    ECHO %%i and !J!
)
GOTO :EOF

:DECTOHEX VAR
SET "DEC=!%1!"
SET "HEX="
:NEXT
    SET /A DIGIT=DEC%%16, DEC/=16
    SET "HEX=%DIGIT%%HEX%"
IF %DEC% NEQ 0 GOTO NEXT
SET "%1=%HEX%"
EXIT /B

编辑:回复评论

正如问题中所述,以前的解决方案在移位值只有一位时正确工作。如果移位的值可能有几个位,则需要更一般的十进制到十六进制转换,如下所示:

代码语言:javascript
复制
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

REM DEFINE THE HEXA DIGITS
SET "HEXA=0123456789ABCDEF"

FOR /L %%i IN (1,1,8) DO (
    SET /A "J=3<<%%i"
    CALL :DECTOHEX J
    ECHO %%i and !J!
)
GOTO :EOF

:DECTOHEX VAR
SET "DEC=!%1!"
SET "HEX="
:NEXT
    SET /A DIGIT=DEC%%16, DEC/=16
    SET "HEX=!HEXA:~%DIGIT%,1!%HEX%"
IF %DEC% NEQ 0 GOTO NEXT
SET "%1=%HEX%"
EXIT /B
票数 3
EN

Stack Overflow用户

发布于 2015-10-06 05:54:24

代码语言:javascript
复制
@echo off
setlocal enabledelayedexpansion
set x=2
set n=1
set /a result=n
for /l %%a in (1,1,10) do (
  set /a result*=x
  if "!result:~0,1!"=="1" set result=!result:16=10!
  echo %%a and !result!
)

产出:

代码语言:javascript
复制
1 and 2
2 and 4
3 and 8
4 and 10
5 and 20
6 and 40
7 and 80
8 and 100
9 and 200
10 and 400
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32961479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档