gpt4 book ai didi

c - 在 c 中生成随机 ip 号码的最快方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 05:30:26 25 4
gpt4 key购买 nike

我需要快速方法来生成有效的 ip 号码(保留的 ip 也有效)。现在我正在使用这个:

unsigned char *p_ip;
unsigned long ul_dst;

p_ip = (unsigned char*) &ul_dst;
for(int i=0;i<sizeof(unsigned long);i++)
*p_ip++ = rand()%255;
ip.sin_addr.s_addr = ul_dst;

但有时它会生成非有效数字,但这段代码可以在一秒钟内生成大约 10k 的有效 ips。任何人都可以贡献吗?谢谢

最佳答案

调用 rand() 可能是代码中最慢的部分,如果您使用在 http://en.wikipedia.org/wiki/Multiply-with-carry 中找到的随机函数的实现

这是一个用于生成随机数的超快 C 函数。

sizeof(unsigned long) 存储在注册变量中,即:

register int size = sizeof(unsigned long)

也应该略有帮助。

由于您使用的是 4 个字符 = 4 x 8 字节内存,因此您可以改用一个 32 位整数,它只需要一个内存地址。结合位移位、新的随机方法、注册变量,应该可以大大减少运行时间。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <time.h>

uint32_t ul_dst;
init_rand(time(NULL));
uint32_t random_num = rand_cmwc();

ul_dst = (random_num >> 24 & 0xFF) << 24 |
(random_num >> 16 & 0xFF) << 16 |
(random_num >> 8 & 0xFF) << 8 |
(random_num & 0xFF);

printf("%u\n",ul_dst);
return 0;

在这段代码之上,我有来自维基百科的随机函数的精确副本。希望这会运行得更快。我们知道 32 位 int 的大小是 4*8,所以不再需要 sizeof,我用 255 位掩码代替了 %255

关于c - 在 c 中生成随机 ip 号码的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7526449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com