c_cpp C中的小型随机字符串生成器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp C中的小型随机字符串生成器相关的知识,希望对你有一定的参考价值。
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
typedef struct
{
uint64_t state;
uint64_t inc;
} pcg32_random_t;
uint32_t
pcg32_random_r(pcg32_random_t* rng)
{
uint64_t oldstate = rng->state;
// Advance internal state
rng->state = oldstate * 6364136223846793005ULL + (rng->inc | 1);
// Calculate output function (XSH RR), uses old state for max ILP
uint32_t xorshifted = ((oldstate >> 18u) ^ oldstate) >> 27u;
uint32_t rot = oldstate >> 59u;
return (xorshifted >> rot) | (xorshifted << ((-rot) & 31));
}
char*
make_string(pcg32_random_t* rng, char* buf, size_t len)
{
char n = 0;
n = pcg32_random_r(rng);
for (size_t i = 0; i < len - 1; i++) {
n = 0;
again:
n = pcg32_random_r(rng);
if ((n < 'A' || n > 'Z') && (n < 'a' || n > 'z') && (n < '0' || n > '9'))
goto again;
buf[i] = (char)n;
}
buf[len - 1] = 0;
return buf;
}
int
main(void)
{
char string[32] = { 0 };
// Do a little magic to seed the generator initially
pcg32_random_t r = { 0 };
r.inc = (time(NULL) << 1u) | 1u;
pcg32_random_r(&r);
r.state = (uintptr_t)&r << 8;
for (size_t i = 0; i < 10; i++)
printf("%s\n", make_string(&r, string, sizeof(string)));
exit(0);
}
以上是关于c_cpp C中的小型随机字符串生成器的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp xoroshiro128 +伪随机数生成器的C ++包装器
c_cpp 使用细胞自动机生成随机数
c_cpp 伪随机生成的假数据用于测试内部工具
c_cpp 带有putc打印的小型trie框架
c_cpp 给出链表,使得每个节点包含一个附加的随机指针,该指针可以指向列表中的任何节点或为空。返回
c_cpp 用于嵌入式程序的小型RingQueue(例如Arduino,AVR,mbed等。