可能重复:
Random long long generator C++
Random long long using boost
我有一个8字节长的缓冲区,我需要填充伪随机字节,我怎么能用C ++来做,也许可以提升。
谢谢!
答案 0 :(得分:1)
试试这个:
#include <iostream>
#include <boost/random/random_device.hpp>
#include <boost/cstdint.hpp>
int main (int argc, char* argv[])
{
boost::uint32_t buffer[2]; // 8 bytes
boost::random::random_device rng;
// generate wants 32-bit integers to fill which is why
// we use boost::uint32_t here instead of char buffer[8] for example.
rng.generate(buffer, buffer + 2);
for (int i = 0; i < 2; ++i)
std::cout << (int) buffer[i] << std::endl;
return 0;
}
我没有对此进行编译测试,但从阅读中我得到的参考应该是正确的。
答案 1 :(得分:0)
对于提升,请查看http://www.boost.org/doc/libs/1_52_0/doc/html/boost_random.html(巧合的是,搜索“随机提升”时的第一个google结果)。
如果你可以使用C ++ 11编译,你可以看到std :: random_device是否有效。有关详细信息,请查看http://www.cplusplus.com/reference/random/random_device/。
如果这些都不起作用,并且您确定,您只需要伪随机字节并且没有特定的安全要求:从机器中获取一些信息你正在运行不静态(例如当前时间,进程ID和单调增加的计数器)将它们全部填入字符串中(获得类似“1354654195-4710-1”的内容)结果)和MD5(或SHA-1)字符串的内容。你将得到16(或20)个字节。选择其中的8个,并将它们填入缓冲区。多田。
如果你需要这个随机缓冲区用于加密目的,你应该不使用这些技术。
答案 2 :(得分:0)
for(int i = 0; i < 8; i++)
buffer[i] = rand();