朋友们,我正在尝试在我的网络服务器上生成随机十六进制字符串。我在Windows 10上使用Apache HTTPD。我使用十六进制字符串作为会话ID等。
到目前为止我尝试过的代码:
setlocal enabledelayedexpansion
set HESSTR=0123456789ABCDEF
set /a tempone="("%RANDOM%"*"16")"
set /a RANHEXS=tempone"/"32767
echo %RANHEXS%
set hexout=!HESSTR:~%RANHEXS%,1!
echo %hexout%
pause
endlocal
但是此代码始终会返回7
...我做错了什么?
非常感谢!
答案 0 :(得分:3)
这是一个创建随机十六进制数字的方法,该数字依赖于未记录的内置环境变量=ExitCode
,它将退出代码作为8位十六进制数字返回:
rem // Set ErrorLevel and exit code to a random number:
cmd /C exit %RANDOM%
rem // Return the last digit of the hexadecimal exit code:
echo %=ExitCode:~-1%
请注意,退出代码可以从00000000到FFFFFFFF。然而,RANDOM
的值涵盖0到32767的范围,即以十六进制表示法表示的0000到7FFF;因此,您最多可以使用最后三位数来构建一个3位十六进制数字。
答案 1 :(得分:2)
@Set /a num=%random% %% 16 + 1
Echo %num% / 16
参见set /?。 %
在C语言中定义为
%余数运算符的结果是第一个操作数除以第二个
时的余数
我们需要使用其他%
转义%
,%%
。
所以你将数字除以你想要的范围 - 所以165 %% 16 = 5
(余数)。然后我们加1使其成为1到16,否则它将是0到15。
PS CMD异常是0-32767,大多数随机数介于0和1之间,然后乘以。这是来自VBScript的帮助 - Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
所以(16 - 1 + 1) * RandomNum + 1
。