首页 > 解决方案 > 如何生成 00 和 FF 之间但没有相等字符组合的随机值?

问题描述

我希望如果有可能在 01 和 FD 之间有一个随机值,但无论何时使用 random 命令,它都会返回一个没有两次相同字母的值......

所以,通过这个我会从随机的可能性中删除值 00, 11, 22, 33, 44, 55, 66, 77, 88, 99, AA, BB, CC, DD, EE, FF

有人能帮我吗 ?

标签: batch-file

解决方案


您可以使用一个简单的公式来避免 17 的倍数(并完全避免循环)。
诀窍是除以 16(不是 17),因为每个系列只有 16 个连续值。

@echo off

set /a val=1 + ( %random% %% 240 )    
set /a sane=(val - 1) / 16 + val    
call :dec2hex %sane%
echo %hex%
exit /b

:dec2hex
setlocal EnableDelayedExpansion
set /a nibbleHigh=%1 / 16
set /a nibbleLow=%1 %% 16
set "hexMap=0123456789ABCDEF"
set "hex=!hexMap:~%nibbleHigh%,1!!hexMap:~%nibbleLow%,1!"
(
  endlocal
  set "hex=%hex%"
  exit /b
)

推荐阅读