首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图制造一个8-4十六进制数生成器,但出于某种原因,它给了我4-4数字。

试图制造一个8-4十六进制数生成器,但出于某种原因,它给了我4-4数字。
EN

Stack Overflow用户
提问于 2022-05-21 17:11:21
回答 1查看 58关注 0票数 0
代码语言:javascript
复制
@echo off
echo lol testing
pause
@echo off
Setlocal EnableDelayedExpansion
Set _RNDLength=8
Set _Alphanumeric=0123456789ABCDEF
Set _Str=%_Alphanumeric%987654321
:_LenLoop
IF NOT "%_Str:~18%"=="" SET _Str=%_Str:~9%& SET /A _Len+=9& GOTO :_LenLoop
SET _tmp=%_Str:~9,1%
SET /A _Len=_Len+_tmp
Set _count=0
SET _RndAlphaNum=
SET :_loop
:_loop
Set /a _count+=1
SET _RND=%Random%
Set /A _RND=_RND%%%_Len%
SET _RndAlphaNum=!_RndAlphaNum!!_Alphanumeric:~%_RND%,1!
If !_count! lss %_RNDLength% goto :_loop

Set _RNDZLength=4
SET _RNDZ=%Random%
SET _RndAlphaNumz=
:_loop
SET _RndAlphaNumz=!_RndAlphaNumz!!_Alphanumeric:~%_RNDZ%,1!
If !_count! lss %_RNDZLength% goto _loop

Set _RNDZALength=4
SET _RNDZA=%Random%
SET _RndAlphaNumez=!_RndAlphaNumez!!_Alphanumeric:~%_RNDZA%,1!
If !_count! lss %_RNDZALength% goto _loop

Set _RNDZADLength=4
SET _RNDZAD=%Random%
SET _RndAlphaNumedz=!_RndAlphaNumedz!!_Alphanumeric:~%_RNDZAD%,1!
If !_count! lss %_RNDZALength% goto _loop

Set _RNDZADALength=12
SET _RNDZADA=%Random%
SET _RndAlphaNumedaz=!_RndAlphaNumedaz!!_Alphanumeric:~%_RNDZADA%,1!
If !_count! lss %_RNDZALength% goto _loop

echo !_RndAlphaNum!-!_RndAlphaNumz!
pause

这是我的代码(我知道只有2个变量在回显中),我试图让它打印8-4-4- 12,尝试了很多东西,有人能帮上忙吗?我从我制作的4-4生成器中复制了代码,但我将代码从4改为8,在上面运行了大约2个小时,试图找出出了什么问题,但没有找到。

EN

回答 1

Stack Overflow用户

发布于 2022-05-22 02:33:13

对我来说,这就像是一个XY问题。如果您想要生成GUID,就会有也许更容易的方法

但是如果你更喜欢重新发明轮子,那么我建议使用一个批处理函数来产生你的随机性,这将是一个比你的降落伞和梯子代码更干净的解决方案。就像这样:

代码语言:javascript
复制
@echo off & setlocal disabledelayedexpansion

call :rndhex 8 group[0]
call :rndhex 4 group[1]
call :rndhex 4 group[2]
call :rndhex 4 group[3]
call :rndhex 12 group[4]

echo %group[0]%-%group[1]%-%group[2]%-%group[3]%-%group[4]%

exit /b

:rndhex <length> <return_var>
setlocal enabledelayedexpansion
for %%I in (
    "0=0" "1=1" "2=2" "3=3" "4=4" "5=5" "6=6" "7=7" "8=8"
    "9=9" "10=A" "11=B" "12=C" "13=D" "14=E" "15=F"
) do set %%I

for /L %%I in (1,1,%~1) do (
    set /a "digit = !random! * 16 / 32768"
    for %%A in (!digit!) do set "hex=!%%A!!hex!"
)

endlocal & set "%~2=%hex%"
exit /b
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72331711

复制
相关文章

相似问题

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