我希望生成一个伪随机数/置换,它在一个范围内"占据"一个完整的周期或整个周期.通常,"线性同余发生器"(LCG)可用于生成此类序列,使用如下公式:
X = (a*Xs+c) Mod R
Run Code Online (Sandbox Code Playgroud)
其中Xs是种子,X是结果,a和c是相对的素数常数,R是最大值(范围).
(通过完整周期/完整周期,我的意思是可以选择常数,使得任何X在一些随机/置换序列中仅出现一次,并且将在0到R-1或1到R的范围内).
LCG几乎满足了我的所有需求.我对LCG的问题是奇数/偶数结果的非随机性,即:对于种子Xn,结果X将交替奇数/偶数.
问题:
有没有人知道如何创造类似的东西,不会交替奇/偶?
我相信可以建立'复合LCG',但我没有细节.有人可以举一个这个CLCG的例子吗?
是否有替代公式可能符合上述细节和下面的约束?
约束:
计算不应该溢出并且有效/快速,即:没有大的指数或几十个乘法/除法.
序列不一定非常随机或安全 - 我不需要加密随机性(但如果可行则可以使用它),只需要"好"随机性或明显随机性,没有奇数/偶数序列.
任何想法都赞赏 - 提前感谢.
更新:理想情况下,Range变量可能不是2的精确幂,但在任何一种情况下都应该有效.
实际上,根据标题,在验证访问权限时可以做些什么来击败键/击键记录?
我刚刚发布了一个相关的问题(如何存储和验证数字 -从一个密码中随机选择),询问从PIN /密码中选择随机数字的建议.还有哪些其他合理不显眼的方法?
任何和所有解决方案赞赏.
是否有一种优雅的方式在一个字节(或字/长)内移动一点.为简单起见,我们使用一个简单的8位字节,只需一位在字节内移动.
给定一个位数,基于0-7最小sig位到大多数sig位(或者如果你更愿意位1-8位),我想从一个位置移动到另一个位置:
7654 3210 <bit position
0101 1010 <some binary value
--x- --y- <move bit from x to y
0111 0100 <new value with x moved to y and intervening bits shifted left
Run Code Online (Sandbox Code Playgroud)
因此,位位置5处的x在位位置1处移动到y,位0,6,7保持不变.位2,3,4向左移动到"腾出空间",位数从5移动到2.这只是一个例子.
该位移动非常重要,而不是与其目标交换.有许多比特的例子可以互换,但这非常简单.
理想情况下,该解决方案将使用简单的bit-twiddling和bitwise运算符.假设语言不可知,位简单AND/OR/XOR,NOT,SHIFT左/右/ ROTATE或类似指令在任何组合中都可以,加上任何其他基本算术运算符,例如:mod,加/减等.甚至工作伪 - 代码没问题.或者,位阵列或位域类型结构可能很简单.
除了实际的位移动,我想找到一种方法:
性能不是一个主要问题,但优雅的东西可以足够快.
我自己的niaive方法是识别源位和目标位位置,决定是上移还是下移,移位复制,屏蔽静态位并找到源位,合并静态位和移位位并以某种方式设置/清除目标位.然而,虽然理论看起来不错,但优雅的实现却超出了我的范围.
我意识到可以为一个字节构建一个预编译的查找表,但如果要将它扩展为整数/长整数,这对我来说是不切实际的.
任何帮助赞赏.提前致谢.
有没有人知道如何使用SQL将几个字节传递到二进制(或varbinary)字段,理想情况下是在ADO(经典)和VBScript(或Visual Basic 6)中?
我希望编码10-20(可能更多)字节的数据,并将此数据存储在SQL db字段中.(它不是MS-SQLSVR,但我希望标准的SQL支持格式能够正常工作!)
这些字节可用作通过AscB/ChrB获得的字节串,OR,一个'bytes'数组(实际上是通过'cbyte'获得的字节类型的变体)并存储在数组中.
第一个选项:使用字符串格式 我已经有一些(有限的)成功创建SQL插入:
x = ".>?hD-&91k[=" '<psuedo string of chars, some unprintable
Insert Into rawtest (byt) Values (CAST('" & x & "' as SQL_BINARY(12)))
Run Code Online (Sandbox Code Playgroud)
但我担心字符串空值会截断字段中的数据,而其他非打印控制字符将妨碍处理数据.有办法避免这种情况吗?
第二个选项:字节数组 我可以很容易地将数据放入数组中,但无法看到如何传递给SQL Insert语句.如果我尝试传入12个字节,则由于CAST尝试将数据存储到整数(4字节),插入失败.如果我传入单个字节,它可以工作,例如:
x = a(0)
Run Code Online (Sandbox Code Playgroud)
并继续工作4个字节,但在Integer溢出时失败.此外,它重新排序数据
我试图使用各种变通方法:
Insert Into rawtest (byt) Values (CAST('12,34,45' as SQL_BINARY(12)))
Insert Into rawtest (byt) Values (CAST(&h12&h34 as SQL_BINARY(12)))
Insert Into rawtest (byt) Values (CAST(0x123456789012 as SQL_BINARY(12)))
Run Code Online (Sandbox Code Playgroud)
我也尝试过类似的组合:
Insert Into rawtest (byt) Values (CONVERT('" & x & "', SQL_BINARY)
Run Code Online (Sandbox Code Playgroud)
但这些都失败了!
理想情况下,我想要一个方法,任何方法,它采用一个最多20个字节的小二进制数组(理想情况下完整字节范围为0-255,但可能需要更少)并将它们传递给普通的原始二进制SQL字段.
理想情况下,我需要在VBScript/ADO中执行此操作,但如果可用,则可以使用基于VB6的解决方案.我想把它作为'原始'二进制文件,我不想使用ascii编码,比如Base64.
我用谷歌搜索,直到我麻木,并没有发现与SQL中的二进制字段相关的很多东西.
你能帮我吗?任何答案都赞赏.很多thx.
我想知道是否有一个"本地运行时环境"用于托管Javascript代码,这不是基于浏览器的,用于运行小型本地应用程序?类似于WSH(Windows Scripting Host)的JavaScript(不是MS-JScript).
我想在本地运行一些javascript脚本,就像我可能用于VBScript(VBS)一样,可能会出现以下情况:
或者,如何考虑仅在"本地"模式下运行浏览器?即:启动,运行代码,退出,也许使用命令行开关/选项,没有太多的开销?如果是这样,哪个浏览器?火狐?有可能以某种方式"提取"JS运行时引擎/ DLL并调用它吗?
那么,简而言之,像WSH这样的东西只适用于javascript?
谢谢.