batch-file - 如何生成 00 和 FF 之间但没有相等字符组合的随机值?
问题描述
我希望如果有可能在 01 和 FD 之间有一个随机值,但无论何时使用 random 命令,它都会返回一个没有两次相同字母的值......
所以,通过这个我会从随机的可能性中删除值 00, 11, 22, 33, 44, 55, 66, 77, 88, 99, AA, BB, CC, DD, EE, FF
有人能帮我吗 ?
解决方案
您可以使用一个简单的公式来避免 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
)
推荐阅读
- c++ - 将 std::string 称为 char*
- oop - 减少 DTO 验证的代码重复
- java - # 网格中最小值为 88 的子网格数
- python - 如何将正在运行的帧与opencv中的新屏蔽帧结合起来?
- javascript - 为什么小书签脚本被阻止?网页 CSP 似乎没问题
- java - 以编程方式创建文本视图的问题
- ajax - 如何刷新传单标记值
- python - PYTHON - 将元组转换为字符串
- snakemake - Snakemake 扩展功能替代
- amazon-web-services - 从一个帐户中的 jenkins 启动 aws ssm 到另一个实例中的 ec2 以进行数据传输