QQ空间登陆参数2147483647分析

pgv_pvid: 通过网页源码可以看到他是这样实现的

d = (Math.round(Math.random() * 2147483647) * (new Date().getUTCMilliseconds())) % 10000000000;

Math.random()*2147483647 意思是在0到2147483647取一个随机数,这个round应该是四舍五入的意思了。

getUTCMilliseconds这个是取毫秒数,c++中SYSTEMTIME这个结构里面就有

本来是打算使用rand()直接取随机数的,了解后才发现rand()的取值范围是0~32767,这下可难到我了。网上有方法解决,但是觉得都好麻烦。还没去尝试,因为感觉这个参数对于登陆这块儿应该不是特别重要的,毕竟是随机数。重要的应该是前后对应,就是说我这里是这样子,之后再发送给服务器时同样要还是这个数

回归正题,这个随机数范围太大,那种方法感觉又太麻烦,瞎逛了半天也没好的方法。

然后突然就对2147483647这个数字感到疑惑,为什么是这个呢。

前面说到rand()取值范围为0~32767,所以所以可能出现的不同值为32768,32768*32768=1073741824,我拿它又乘以2,得到结果2147483648,这个就表示rand()*rand()*2所出现的最大次数为2147483648,其值范围就在0~2147483647之间。

呵呵,这样说来的话,Math.round(Math.random() * 2147483647)这个函数用c++来做的话 使用rand()*rand()*2效果应该是等同的;

------------------------------------

额,吃了一顿饭之后,和朋友侃了几句,才发现,这样的推论是不完全正确的。

我才想起来,一个int如果是4字节,32位的话,他的最大值就是2147483647,这样说来的话,这个函数的目的就是取一个int类型的随机数

之所以说不完全正确就是因为上面的猜测有误,但是如果想用c++生成这个随机数的话,上面的推论是没错的。


---------------------------------

再次编辑,这两天的研究表明,这个参数没啥用,保持不变即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值