创建一个128字节的随机数

2024-03-10

If the rand()函数创建一个长度为 4 字节的随机数,我想创建一个长度为 1024 位(128 字节)的随机数,这是通过连接来获得此值的最简单方法rand()函数256次还是有其他方法?

#include <stdio.h>
#include <string.h>

int main(void) {
  const char data[128];
  memset(&data, 0x36, 128);

  printf("%s\n", data);
  puts("");
  printf("%d\n", sizeof(data)/sizeof(data[0]));
  puts("");

  int i = 0;
  unsigned long rez = 0;

  for(i = 0; i < 20; i++) {
      unsigned int num = rand();
      rez = rez + num;
      printf("%x\n", rez);
  }

  printf("%x\n", rez);
  return 0;
}

是通过连接 rand() 函数 256 次来实现此目的的最简单方法还是有其他方法?

Each rand()返回一个值在[0...RAND_MAX]范围。RAND_MAX仅限于32767 <= RAND_MAX <= INT_MAX.

Very commonly RAND_MAX is a Mersenne number http://mathworld.wolfram.com/MersenneNumber.html of the form 2n − 1. Code can take advantage of this this very common implementation dependent value. Each rand() call then provides RAND_MAX_BITS and not 32 as suggested by OP for a 4-byte int. @Matteo Italia https://stackoverflow.com/questions/50819313/create-a-128-byte-random-number/50820616#comment88644503_50819313

[请参阅下面的更新]

#include <stdlib.h>

#if RAND_MAX == 0x7FFF
#define RAND_MAX_BITS 15
#elif RAND_MAX == 0x7FFFFFFF
#define RAND_MAX_BITS 31
#else
#error TBD code
#endif

Call rand() ⌈size * 8 / RAND_MAX_BITS⌉次。这减少了rand() 需要来自的电话size.

void rand_byte(uint8_t *dest, size_t size) {
  int r_queue = 0;
  int r_bit_count = 0;
  for (size_t i = 0; i < size; i++) {
    int r = 0;
    //printf("%3zu %2d %8x\n", i, r_bit_count, r_queue);
    if (r_bit_count < 8) {
      int need = 8 - r_bit_count;
      r = r_queue << need;
      r_queue = rand();
      r ^= r_queue;  // OK to flip bits already saved in `r`
      r_queue >>= need;
      r_bit_count = RAND_MAX_BITS - need;
    } else {
      r = r_queue;
      r_queue >>= 8;
      r_bit_count -= 8;
    }
    dest[i] = r;
  }
}

int main(void) {
  uint8_t buf[128];
  rand_byte(buf, sizeof buf);
  ...
  return 0;
}

如果你想要最简单但效率较低的code,只需调用rand()对于每个字节的回答@dbush https://stackoverflow.com/a/50820014/2410359


[2021 年更新]

@匿名提问者 https://stackoverflow.com/a/4589384/2410359发布了一个漂亮的宏,它返回 a 的位宽度梅森数 http://mathworld.wolfram.com/MersenneNumber.html,更一般地比#if RAND_MAX == 0x7FFF方法如上。

/* Number of bits in inttype_MAX, or in any (1<<b)-1 where 0 <= b < 3E+10 */
#define IMAX_BITS(m) ((m) /((m)%0x3fffffffL+1) /0x3fffffffL %0x3fffffffL *30 \
              + (m)%0x3fffffffL /((m)%31+1)/31%31*5 + 4-12/((m)%31+3))

_Static_assert((RAND_MAX & 1 && (RAND_MAX/2 + 1) & (RAND_MAX/2)) == 0, 
    "RAND_MAX is not a Mersenne number");
#define RAND_MAX_BITS IMAX_BITS(RAND_MAX)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建一个128字节的随机数 的相关文章

随机推荐

  • 如何使用 addHandler 引发事件

    我对 Vb Net 事件和处理程序感到满意 任何人都可以帮助我如何在 C 中创建事件处理程序并引发事件 只了解 C 或只了解 VB Net 的开发人员可能不知道 这是 VB NET 和 C 之间较大的区别之一 I will 无耻地复制 ht
  • 检查迭代器的类型是否为reverse_iterator

    有没有办法检查作为arg传递给fnc的迭代器是否是reverse iterator 有没有我可以使用的迭代器特征函数 编写部分专业化的代码很简单 include
  • 动态创建树视图

    我正在尝试使用 c 和 asp net 动态创建树视图 我使用 populate ondemand 属性创建了一个延迟加载树视图 gt
  • 包括库在Android项目中使用的共享对象

    我的 Android 项目正在使用具有本机代码的 Android 库项目 并且我得到了UnsatisifiedLinkError来自库使用的本机函数 我已将库使用的这些共享对象包含在项目的 Android mk 文件中 并将它们正确复制到
  • Java 中 JTable 的两个单元格之间的乘法

    当我在 单位 和 价格 列第一行的单元格中输入值时 金额 列 列单元格值应设置为 unit 和 amount 的乘积 我应该使用哪个监听器 请帮忙 因为我是 Java 新手 CODE JTable jTable1 DefaultTableM
  • Pyinstaller - 加载 Python DLL 时出错 - FormatMessageW 失败

    我编译了我的 py文件运行以下命令 pyinstaller myfile py onefile 当我在我的上运行它时pc Windows 10 一切都很好 当我尝试在我的 虚拟机 Windows 8 上运行它时 我收到以下错误 加载 Pyt
  • 部署到 Heroku 失败。移动文件与节点版本不兼容

    我正在努力将新的 Rails 6 应用程序部署到 Heroku 它在我本地运行良好 在部署过程中 我收到以下输出 不幸的是 我对 webpack 和 Yarn 还很陌生 这似乎是 move file 的版本 依赖关系问题 而 move fi
  • 插入附近的语法不正确

    我是学生 这是家庭作业 表在那里 但没有插入数据 感谢您的任何建议 Msg 156 Level 15 State 1 Line 181 Incorrect syntax near the keyword INSERT SQL语句 USE M
  • 在字符串中的某些字符之前和之后添加空格

    我想在字符串中的某些字符之前和之后添加空格 var x asdasdasdasd adasdasdasd asdasdasdasd asdasdasd asdasdasd asdasdasdadasdasd 我想在前后添加空格 var se
  • 包括标签和数据绑定

    我想在同一视图中多次使用我的布局之一include 假设我有一个custom xml包括一些TextViews custom xml
  • Reactjs不加载文本字体

    我在用React with Typescript and Styled Component我无法上传文本字体 只有字体可以不在浏览器中加载 我所拥有的是以下 字体 ts import css from styled components e
  • MFMessageComposeViewController 和 iMessage

    我正在构建一个有按钮的应用程序 如果您触摸该按钮 则会出现MFMessageComposeViewController将显示 并填写正文和一名收件人 该收件人是 4343 这是比利时短信的简码 这里错误的是MFMessageComposeV
  • 如何捕获 paypal webhook?

    我已在我的网站中集成了 PayPal 智能按钮createOrder and Capture在服务器端处理 付款完成后 交易即可在业务沙箱帐户上使用 并且webhook事件在 Webhooks 事件页面中注册 The webhook POS
  • Apache 模块命令解析器原型

    我正在创建 Apache2 模块并遇到奇怪的编译问题 这是我的函数的原型 用于解析名为 的配置命令分析IP static const char apr cfg set analytics ip cmd parms cmd void conf
  • tensorflow conv2d内存消耗解释?

    output tf nn conv2d input weights strides 1 3 3 1 padding VALID My input形状为 200x225x225x1 weights是 15x15x1x64 因此 output形
  • nbactions.xml 有何用途?

    经过一段时间的搜索后 我认为这与使用 Maven 和 Net beans 构建应用程序有关 但我似乎找不到这方面的良好文档 使用 nbaction xml 可以实现哪个目标 如果有的话 哪一个与 Eclipse 等效 The nbactio
  • 为什么这个 constexpr 代码会导致 GCC 吃掉我所有的 RAM?

    以下程序将调用fun2 MAXD 1 次 不过 最大递归深度永远不应该超过 MAXD 如果我的想法是正确的 因此 编译可能需要一些时间 但它不应该占用我的内存 include
  • 特定文件夹结构中的文件的 Azure 存储

    目前我有一些 ftp 其中有一些文件夹和文件的深层结构 它甚至可能比根文件夹低 10 级 由于我已经成功地将本地数据库迁移到 azure 数据库 我还想知道是否有任何 azure ftp 我也可以用来迁移它 我知道我们有类似 Azure 存
  • 如何在 Bootstrap 3 中使用 bootstrap-theme.css?

    从以下位置下载完整的 bootstrap 3 包后http getbootstrap com http getbootstrap com 我注意到主题有一个单独的 css 文件 如何利用它 请解释 包括我bootstrap theme cs
  • 创建一个128字节的随机数

    If the rand 函数创建一个长度为 4 字节的随机数 我想创建一个长度为 1024 位 128 字节 的随机数 这是通过连接来获得此值的最简单方法rand 函数256次还是有其他方法 include