如何使用 C/C++ 预处理器生成一系列随机数

2024-01-05

我想生成一系列随机数C预处理器,并将它们存储在变量中以供我的程序使用。

目标:

我想在每次构建程序时生成一组“独特”的随机数。存储随机数的变量的一小部分将被有意义的(即非随机)数字覆盖。我希望黑客不可能通过调试程序或比较多个版本来区分有意义的数字和随机数字。我希望构建过程能够自动化且独立。我希望该实现能够跨 Visual Studio 和 GCC 移植。

澄清:

  1. 计算必须在编译时完成,而不是在程序执行时完成。例如,调试程序的任何人都应该只能看到变量被初始化为常量(随机数)。
  2. 随机数应该是整数。
  3. 随机数生成器应该以某种方式从__DATE__ and __TIME__,因此不同的构建会产生不同的随机数。
  4. 最好能够指定随机数的范围(例如从 1 到 100),但不是绝对必要。
  5. 最好但不是绝对必要的是,能够指定要生成的随机数总数(例如声明 1000 个变量并将每个变量初始化为随机数)。

到目前为止的尝试:

  1. 上一篇关于预处理器中算术的线程:C 预处理器可以执行整数运算吗? https://stackoverflow.com/questions/1560357/can-the-c-preprocessor-perform-integer-arithmetic要点是#if 条件可以计算算术值。
  2. 谷歌搜索显示,除了算术运算之外,移位和位运算也可以通过 #if 进行评估。我已经用 Visual Studio C++ 确认了这一点。
  3. 简单随机数生成器的候选者:http://www.ciphersbyritter.com/NEWS4/RANDC.HTM#[电子邮件受保护] http://www.ciphersbyritter.com/NEWS4/RANDC.HTM#369B5E30.65A55FD1@stat.fsu.edu这些生成器中的任何一个,或者任何不可能从给定的一系列随机数进行逆向工程的生成器都可以,因为我不需要一个表现特别好的生成器。为了进行本练习,我们可以使用以下示例:

    unsigned long jcong=380116160;
    #define CONG (jcong=69069*jcong+1234567)
    
  4. 我认为基本问题是在对生成器的连续调用之间存在存储在变量 jcong 中的状态。据我所知,预处理器不支持变量赋值。也许有一些聪明的递归宏可以做到这一点?

  5. 我能得到的最接近但不能满足我由预处理器执行的目标是:

    unsigned long jcong=380116160;
    unsigned long randomBlock[] = {jcong=69069*jcong+1234567, jcong=69069*jcong+1234567};
    

    我已在 Visual Studio C++ 中确认,这确实将数组成员初始化为不同的随机数。但是,调试器仍会逐步完成初始化。

这是一个纯粹的编程/实现问题,所以请不要劝说预处理器的邪恶或对抗黑客的徒劳。


因此,这是接近要求的解决方案:

// pprand.h

#include <boost/preprocessor/slot.hpp>

#ifndef PP_RAND_SEED
#define PP_RAND_SEED    (((PP_RAND_MIN + PP_RAND_MAX) * 0x1f7) ^ 0x1e3f75a9)
#endif

#define BOOST_PP_VALUE ((PP_RAND_SEED * 214013 + 2531011) % 65536)
#include BOOST_PP_ASSIGN_SLOT(1)
#undef BOOST_PP_VALUE
#undef PP_RAND_SEED
#define PP_RAND_SEED    BOOST_PP_SLOT(1)

#define BOOST_PP_VALUE (PP_RAND_MIN + PP_RAND_SEED % (PP_RAND_MAX - PP_RAND_MIN))
#include BOOST_PP_ASSIGN_SLOT(2)
#undef BOOST_PP_VALUE

#ifdef PP_RAND
#undef PP_RAND
#endif

#define PP_RAND BOOST_PP_SLOT(2)

你可以这样使用它:

// Pseudo random number range.
#define PP_RAND_MIN 0
#define PP_RAND_MAX 100

// Pseudo random number seed.
#define PP_RAND_SEED 123
#include "pprand.h"

// Got it!
#pragma message("PP_RAND value:" _CRT_STRINGIZE(PP_RAND))

要了解有关此方法的更多信息,请访问我的博客:http://alexander-stoyan.blogspot.com/2012/07/getting-pseudo-random-numbers-at.html http://alexander-stoyan.blogspot.com/2012/07/getting-pseudo-random-numbers-at.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 C/C++ 预处理器生成一系列随机数 的相关文章

  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • 在 HKCR 中创建新密钥有效,但不起作用

    我有以下代码 它返回 成功 但使用两种不同的工具使用搜索字符串 3BDAAC43 E734 11D5 93AF 00105A990292 搜索注册表不会产生任何结果 RegistryKey RK Registry ClassesRoot C
  • C# 方法重载决策不选择具体的泛型覆盖

    这个完整的 C 程序说明了这个问题 public abstract class Executor
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 不同 C++ 文件中的相同类名

    如果两个 C 文件具有相同名称的类的不同定义 那么当它们被编译和链接时 即使没有警告也会抛出一些东西 例如 a cc class Student public std string foo return A void foo a Stude
  • 什么是空终止字符串?

    它与什么不同标准 字符串 http www cplusplus com reference string string 字符串 实际上只是一个数组chars 空终止字符串是指其中包含空字符的字符串 0 标记字符串的结尾 不一定是数组的结尾
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • 没有“对 *this”功能的右值引用的解决方法

    我有一个围绕可移动对象的代理容器类 并希望代理能够隐式生成对底层对象的右值引用 但仅当代理本身被移动时 我相信我将能够按照提案 n2439 实施此行为 将移动语义扩展到 this http www open std org jtc1 sc2
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • C# - Windows CE:表单翻译独立于操作系统区域性设置

    我正在为 Windows CE 设备使用 C 编写一个程序 并且希望根据应用程序本身的语言设置来翻译该应用程序 我已经阅读了一些有关使用资源文件进行本地化以及使用 可本地化 和 语言 属性翻译表单的文章 根据我所读到的内容 我了解到这种类型
  • Python:“打破”外循环

    在下面的Python代码中 narg len sys argv print length arg narg if narg 1 print Usage input filename nelements nintervals break I
  • 更改 Rails 会话 cookie 域而不注销用户

    我正在使用 Rails 4 2 2 带有 Devise 3 4 1 并将 cookie store 域从 www boundless dev 更改为 boundless dev 以便在所有子域之间共享相同的会话 单点登录 Boundless
  • 我应该在 Heroku Cedar 上使用 Thin 还是 Unicorn

    我最近将我的应用程序 升级 到了 Heroku 上的 cedar 平台 默认情况下 我正在使用thin作为网络服务器 但我一直想用unicorn为了并发性并让我的动力美元去爸爸 但我担心使用 Thin 以外的东西会遇到一些问题 有人对这个决
  • UICollectionView 类似报纸的布局

    UICollectionView 是否可以灵活地动态呈现如下所示的界面 Newsify for iPhone 或者只能渲染预定义的静态布局 我想根据图像尺寸 高x宽 进行布局 比如小图像的小网格和大图像的大网格 所有这些都是在运行时根据我从
  • 导入 com.lowagie.database.DatabaseConnection 时出错

    我完成了第 1 章练习 现在转到第 2 章 我正在进行第一次 DatabaseTest 练习 但在导入语句中遇到错误 import com lowagie database DatabaseConnection and import com
  • 更新 Metal 中 MTLBuffer 的内容

    我需要帮助来替换 a 的内容MTL缓冲区无需创建新的 两种情况下的内容都是浮点数组 let vector Float 0 1 2 3 4 5 6 7 8 9 let byteLength arr1 count MemoryLayout
  • Vuejs 变异对象作为 prop 传递

    如果我将一个对象作为 prop 传递 引用 可以改变 prop 中的值吗 我正在开发一个网络应用程序 需要将大量值传递给组件 并且我正在尝试找到将值传递给组件并返回给父级的最佳方法 从我读到的所有内容来看 改变 prop 是错误的做法 因为
  • android 保存到SD卡

    大家好 我有一个小问题 我有这个代码可以将图像保存到 SD 卡 public String SDSave View arg0 TODO Auto generated method stub OutputStream outStream nu
  • 如何禁用点击文本字段时出现的键盘,iOS?

    我有一个文本字段 当用户按下它时我需要显示自定义选择器 选择器显示正常 但问题是键盘出现在底部 我不希望这样 这是一个 iPad 项目 我正在尝试从我的 iPhone 转换它 在 iPhone 上 这种方法效果很好 并且键盘始终是隐藏的 我
  • 如何建立快速可靠的 S3 到 EC2 连接 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 EC2 提供了一种非常方便的 按需可扩展的机制来执行可分布式 可并行 的进程 而 S3 提供了可靠的存储服务 我尝试使用 EC2 节点进行 ETL 和
  • 在 Django 中使用 ContentType 过滤 2 个模型

    我有 2 个配置文件模型 我正在创建一个 与会者 对象 如何仅在 2 个配置文件之间进行过滤 class Profile1 models Model user models ForeignKey User null True unique
  • 在 R 中引用行号

    如何引用观察的行号 例如 如果您有一个data frame称为 数据 并想要创建一个变量data rownumber等于每个观察的行号 如果不使用循环 您将如何做到这一点 这些默认情况下显示为rownames当你创建一个data frame
  • Windows Phone 8.1 C# 应用程序:仅在发布模式下的真实设备上发生严重崩溃 (ExecutionEngineException)

    想象一下以下结构类型 public struct Token IDictionary
  • 使用vba在word文档中查找斜体字体

    随着Find功能 Ctrl F 我可以从文档中搜索并选择所有斜体字 这个用vba怎么实现呢 我尝试了宏记录器 但我得到的代码不起作用 Sub Makro1 Makro1 Makro Makro aufgezeichnet am 16 06
  • Quarkus Keycloak 自定义授权

    我尝试在 quarkus 中进行一些 websocket 身份验证 我目前有使用启用的身份验证的休息端点 我使用 keyclock 进行身份验证 并使用 vert x 与 websocket 进行双向连接 也在 github 线程中发布此问
  • Tmux 边框显示为 x q 而不是线条?

    我无法让 tmux 显示边框线 它们是用 x 和 q 创建的 它是一个 debian squeeze 服务器 区域设置设置为 en US UTF8 我也尝试添加 instructs tmux to expect UTF 8 sequence
  • 使用状态和定时器进行处理

    在 Beam Dataflow 运行程序中使用状态处理和计时器 从 v2 1 0 开始 是否有任何准则或限制 例如状态大小或更新频率的限制等 候选流管道将广泛使用状态和计时器来表示用户会话状态 并使用 Bigtable 作为持久存储 以下是
  • 使用 NSConnection 连接到“www.google.com”时出现错误

    使用连接到 www google com 时出现错误NSConnection 我找不到原因 任何帮助将不胜感激 NSString urkString www google com NSURL url NSURL URLWithString
  • 如何使用 C/C++ 预处理器生成一系列随机数

    我想生成一系列随机数C预处理器 并将它们存储在变量中以供我的程序使用 目标 我想在每次构建程序时生成一组 独特 的随机数 存储随机数的变量的一小部分将被有意义的 即非随机 数字覆盖 我希望黑客不可能通过调试程序或比较多个版本来区分有意义的数