首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将随机数放入缓冲区以写入文件的有效方法是什么?

将随机数放入缓冲区以写入文件的有效方法是什么?
EN

Stack Overflow用户
提问于 2019-06-06 17:49:06
回答 1查看 60关注 0票数 0

我正在尝试使用基本的Linux系统调用,并通过编写一个将随机字节写入文件的程序来编写好的代码。我已经设想了几种不同的方法来做这件事,但我很好奇哪种方法更有效。请随时给我改进我的代码或建议完全不同的方法;我只是在努力改进。

目前,我正在使用mt19937从C++11的随机数中生成随机uint32_t,并在写入文件之前使用memcpy将它们放在缓冲区中。这是一个非常有效的方法吗?

使用memset将缓冲区初始化为0并使用or‘’ing/bit-shifting会更好吗?说到这里,我忘记了如何/是否有一种方法可以做像*(buffer + offset) |= (random32 << BUF_SIZE - sizeof(random32) * currIndex)这样的事情,并让C++放置所有32位而不是单个字符。

代码语言:javascript
运行
AI代码解释
复制
//Here's the actual buffer manipulation/write code I currently have
std::mt19937 rand(std::chrono::system_clock::now().time_since_epoch().count());

    for(ssize_t i = 0; i < size; i += BUF_SIZE)
    {
        //Fill the buffer with random uint32_t's (the buffer is a multiple of 32 right now)
        char buffer[BUF_SIZE];
        for(int j = 0; j < BUF_SIZE; j += sizeof(uint32_t))
        {
            uint32_t num = rand();
            std::fprintf(stderr, "DEBUG: generated random number %x\n", num);
            std::memcpy(buffer + j, &num, sizeof(num));
        }

        // Write buffer to file
        ssize_t bytes_left = size - i;
        ssize_t bytes_to_write = BUF_SIZE > bytes_left ? bytes_left : BUF_SIZE;
        std::fprintf(stderr, "DEBUG: writing %zu bytes to buffer\n", bytes_to_write);
        if(write(fd, buffer, bytes_to_write) != bytes_to_write)
        {
            std::fprintf(stderr, "Failed to write at %zu", i);
            exit(EXIT_FAILURE);
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2019-06-06 18:10:26

执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
::std::array<char, BUF_SIZE> buffer;
::std::generate(buffer.begin(), buffer.end(), rand);

而不是当前用来填充缓冲区的循环。然后调整程序的其余部分,使其使用具有自己的size方法和类似方法的数组buffer,而不是像现在这样的裸char数组。

这更像是C++的方式,而不是你正在做的。尽量减少使用裸指针和数组。尽可能使用标准算法。如果您发现自己在编写for循环,请查看算法库是否已经为您编写了循环。

这也适用于那些不在标准库中的代码。如果您发现自己在编写for循环,请停止。相反,应该弄清楚如何将for循环所做工作抽象到一个可重用的函数中,这样您就可以只编写一次for循环,并在很多情况下使用它。

如果你想了解标准库是如何工作的,那就自己去写那些函数吧。

不要重复自己是绝对最重要的编程原则之一。拉里·沃尔( Larry Wall )著名地将其改写为“懒惰”。学习如何永远不重复自己。如果标准库让你感到不舒服,因为你不知道它在做什么,试着使用编译器资源管理器来看看汇编语言。并尝试自己编写标准库函数。了解工具的上下和横向也是非常重要的。所以这项工作是值得做的。

但是,这才是你应该做的,而不是重复自己,一遍又一遍地训练自己。训练自己以正确的方式做这件事。如果你对不知道细节感到不舒服,那就写下细节,而不是用错误的方式来写,这样你就可以看到细节。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56482710

复制
相关文章
爬虫--xpath匹配,requests库
使用xpath得到老师的图片链接和简介信息,并且把图片保存下来,老师简介保存到文本中; 要求: 杨老师的信息图片<img src="pics/ygf.jpg"> 图片保存的名字叫ygf.jpg,其他老师类似;并且都保存到当前目录下的image目录 杨老师的信息保存文件名叫“ygf.txt”,其他老师类似;并且保存到当前目录下的text目录 代码: import requests from lxml import etree import os def save(img_url, desc):
用户2337871
2019/07/19
5100
爬虫--xpath匹配,requests库
scala 模式匹配的几个模式
Scala 的模式匹配是类似与正则匹配的的模式匹配,但是不仅仅如此,它还可以匹配对象的内在的构建形式.
Tim在路上
2020/08/04
1.2K0
模式匹配
如果在不设置全文搜索的情况下,如何过滤查询结果,您会选择哪种方法?LIKE也许是最容易想到的:
yzsDBA
2021/02/03
9990
模式匹配
匹配操作符(绑定操作符): =~、!~ =~检验匹配是否成功:result= var =~ /abc/;若在该字符串中找到了该模式,则返回非零值,即true,不匹配则返回false。
生信补给站
2020/08/06
1.7K0
Scala 的模式匹配
最近开始学习 Scala,相较于学习 Haskell 的过程来看,Scala 真是直观得多,友好得多,更容易上手。以前写过关于从熟悉的 Java 和 JavaScript 来逐步学习 Groovy 和 Haskell 的文章,这以后再来学习 Scala 的话,就可以不断比较了。如果和我一样有 Java 经验的话但是从来没有接触过 Scala 的话,建议先阅读这篇文章,A Scala Tutorial for Java Programmers,一边比较,一边熟悉,同时配套的还有这个,Scala for Java programmers – Joakim Ohlrogge & Enno Runne,Youtube 上的视频,很直观,然后再从 Scala 官网的文档上面逐步涉入。
四火
2022/07/19
1K0
Scala 的模式匹配
Rust模式匹配
模式匹配是从函数式编程语言(例如:Haskell,Lisp)吸收而来的,用于为复杂的类型系统提供一个轻松的解构能力。rust使用match来提供模式匹配的功能。mathc类似于其它编程语言中的switch-case,但是远比switch-case强大。match的通用模式如下所示。
zy010101
2023/02/27
1.5K0
有趣的Scala模式匹配
它被称为模式匹配,模式匹配包含了一系列以case关键字开头的分支,每一个分支包含一个模式或者是多个表达式。模式有很多种,例如常量模式('*',1),变量模式(可以匹配任何值),通配模式(又见面了,'_'符号),构造方法模式(类似于样例类的初始化)等等。 用一个例子简单说明就是:
哒呵呵
2018/08/06
1.1K0
Rust中的模式匹配
在其它一些语言中,let x = 5 之类的语句,仅仅只是赋值语句。但是在rust中,可以换个角度理解,认为5这个值匹配到了x变量。如果觉得有些牵强,可以再来一个示例:
菩提树下的杨过
2021/11/30
1.9K0
Rust中的模式匹配
Swift中的模式匹配
Swift 作为一门现代语言,除去安全,快速等特性之外,还有个明显有别于其他语言的特性,就是巨量细致入微的语言特性。类似iOS API,初学者觉得繁杂,无从下手,但是熟悉之后,绝对能少写不少代码。
小刀c
2022/09/21
1.8K0
Scala 模式匹配
一个模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。
王知无-import_bigdata
2019/03/19
8980
《模式识别与智能计算》基于PCA的模板匹配法
算法流程: 选取各类全体样本组成矩阵X,待测样品 计算协方差矩阵S 根据S的特征值选取适合的矩阵C 使用矩阵C降维 采用模板匹配开始多类别分类 算法实现 PCA降维算法 def pca(x,k=0,percent = 0.9): """ :function: 主成分分析法 :param X: 数据X m*n维 n表示特征个数,m表示数据个数 :param K: K表是要保留的维度 :param percent: 样本所占比例 :return: 返回特征向量
Max超
2020/01/16
7510
less中的匹配模式
首先来看如下的代码,一个 div 元素,分别设置了上下左右的宽度高度和颜色,然后在浏览器中打开发现四个不同的角都是一个小小的三角形如下
程序员 NEO
2023/09/29
2450
less中的匹配模式
朴素的模式匹配算法
子串(又称模式串)的定位操作通常称做串的模式匹配,是串中最重要的操作之一。朴素的匹配方法(BRUTE FORCE 算法,BF 算法)逻辑思路:
用户7737280
2021/11/10
1K0
Lua模式匹配
Lua并不使用POSIX规范的正则表达式[4](也写作regexp)来进行模式匹配。主要的原因出于程序大小方面的考虑:实现一个典型的符合POSIX标准的regexp大概需要4000行代码,这比整个Lua标准库加在一起都大。
sunsky
2020/08/20
1.8K0
模式匹配算法
模式匹配算法: 定义一个主串字符串S="goodgoogle",再定义一个模式串字符串T="google",然后依次遍历主串中的字符,判断,模式串是否在主串中存在,这种模式串的定位操作通常称为串的模式匹配 代码: 1 /** 2 * 朴素的模式匹配算法 3 * @author wydream 4 * 5 */ 6 7 public class OrdinaryModel { 8 9 public static void main(String[] args)
说故事的五公子
2019/09/11
9320
基于OpenCV的直方图匹配
如何为图像生成直方图,如何使直方图相等,最后如何将图像直方图修改为与其他直方图相似。
AI算法与图像处理
2020/12/07
1.4K0
Python的模式匹配库pampy
模式匹配即给定某种模式,用这种模式去检查序列或字符串是否符合这种模式,这种技术在自然语言处理中经常使用。
Python研究所
2022/06/17
6810
4.3 串的模式匹配算法
1、子串的定位操作通常称做串的模式匹配(其中T称为模式串),是各种串处理系统中最重要的操作之一。
小林C语言
2019/07/12
7240
Python匹配方式之xpath,还在用正则吗?一节课带你学会更简单的xpath
  XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。
云飞
2018/09/14
7370
点击加载更多

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档