![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++学习
文章平均质量分 52
美丽的欣情
不知名C++程序猿一枚
展开
-
time_t类型unix时间戳转换
反之可以使用 localtime_r 函数将unix时间戳转换为结构体;所指向的结构转换为自 1970 年 1 月 1 日以来持续时间的秒数(头文件中有一个结构体,可以保存所有的年、月、日、时、分、秒等相关信息。),发生错误时返回-1。原创 2024-06-21 11:38:36 · 309 阅读 · 0 评论 -
libsndfile使用示例
二、从本地打开wav文件并读取pcm数据。三、从缓存中读取pcm数据。原创 2024-05-23 16:09:10 · 404 阅读 · 0 评论 -
对PCM数据进行重采样
其实重采样的真正原因是这样的,在我们进行音视频开发中,遇到的很多设备的对于音频的格式要求是不一样的。为何需要进行重采样呢?原创 2024-05-16 15:41:10 · 218 阅读 · 0 评论 -
Google 开源项目风格指南
谷歌C++开源项目编码规范:原创 2024-05-07 14:45:21 · 198 阅读 · 0 评论 -
C++代码eSpeak库使用示例
要将 eSpeak 库生成的 PCM 数据转换为 WAV 格式并保存,你可以使用 C++ 的标准文件操作来创建 WAV 文件,并将 PCM 数据写入其中。部分为 eSpeak 生成的实际 PCM 数据。这段代码假设输入的 PCM 数据是单声道、16位的。函数生成 PCM 数据。然后,我们将这些 PCM 数据写入 WAV 文件,并在最后使用。函数用于将 PCM 数据写入 WAV 文件。在函数中,首先构建了 WAV 文件头(结构体),然后将其写入文件,接着将 PCM 数据写入文件。在这个示例中,我们首先使用。原创 2024-04-01 11:19:38 · 335 阅读 · 0 评论 -
htonl()、htons()、ntohl()、ntohs()四个函数
htons 是把你机器上的整数转换成“网络字节序”, 网络字节序是 big-endian,也就是整数的高位字节存放在内存的低地址处。htons 的用处就是把实际内存中的整数存放方式调整成“网络字节序”的方式。这些函数在不同的操作系统上可能会有一些细微的差别,但它们的目的都是为了处理网络数据的字节顺序转换,以确保在不同的主机上进行网络通信时能够正确解释数据的顺序。主机字节顺序指的是在特定主机体系结构上整数的字节表示方式,而网络字节顺序是一种固定的大端字节顺序,用于在不同主机之间进行通信。原创 2024-01-03 10:25:06 · 1688 阅读 · 5 评论 -
jsoncpp库输出浮点型值精度错误
这是因为 21/100 没有精确的浮点表示,默认情况下,我们使用17位数字,因为这是将double的任何值明确表示为字符串所需的数字。这与15==DBL_DIG==std::numeric_limits<double>::digitals10不同,后者是可以在不失真的情况下从字符串解析到double并返回的最大位数。我们选择了足够多的数字来完美地表示每一个可能的双精度值。所以只需要15位数字的精度,因为15位数字可以在不失真的情况下解析和重新打印,但这会牺牲对double数据类型的完整尾数的访问。原创 2023-12-13 15:17:48 · 681 阅读 · 0 评论 -
string转int函数(stoi)
而 atoi 是一个传统的 C 函数,它不会抛出异常,而是在转换失败时返回 0。另外,atoi 并不支持处理带有正负号的字符串,需要额外的处理逻辑来应对这种情况。,除非在非常频繁地进行字符串到整数的转换,在大规模数据处理或性能要求非常高的场景下,可以考虑使用 atoi 作为一种性能优化的选择。但是需要注意的是,优化性能的同时也要考虑到可靠性和安全性的因素,及时处理转换错误和异常情况。异常,这样我们可以在代码中捕获并处理这些异常。而且,stoi 还能处理带有正负号的字符串,能够更方便地转换带有符号的整数。原创 2023-08-25 15:37:35 · 650 阅读 · 0 评论 -
C++获取map最小值算法,STL---std::min_element()!
这些重载仅若 std::is_execution_policy_v (C++20 前)std::is_execution_policy_v (C++20 起) 为 true 才参与重载决议。comp - 比较函数对象(即满足比较 (Compare) 要求的对象),若a 小于 b ,则返回 true。寻找范围 [first, last) 中的最小元素。原创 2023-08-23 10:16:53 · 614 阅读 · 0 评论 -
编译osip2与eXosip2静态库,一文搞定!
添加osipparser2/ 与osip2/再编译。原创 2023-04-14 11:35:32 · 417 阅读 · 0 评论 -
查看linux中程序是否被系统杀死,如何查看日志
最近在linux开发日常中,维护之前发布的程序,几台服务器只有一台在重启,而且不定期,查看服务日志也没有任何signal信号以及服务挂掉的原因打印,迫于无奈怀疑是linux系统给服务干掉了。于是想查看服务被杀掉的日志,看看系统日志,即可判断。即途中目录下的messages文件,通过命令即可过滤信息查看是否被系统killed。用以下命令查看系统日志信息!命令输出如下:参数解析:total-vm: total virtual memory. 进程使用的总的虚拟内存。原创 2023-03-06 11:35:00 · 5520 阅读 · 0 评论 -
脚本一键打包linux服务ldd依赖库
ldd不是一个可执行程序,而只是一个shell脚本 ldd能够显示可执行模块的dependency(所属)(所属),其原理是通过设置一系列的环境变量,如下:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE等。我们知道,ld-linux.so模块会先于executable模块程序工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显示可执行模块的dependency(所属)。原创 2023-03-01 11:26:11 · 657 阅读 · 0 评论 -
C++智能指针学习
本人参考的是夏之七的C++智能指针详解:C++智能指针详解_夏之七的博客-CSDN博客_c++智能指针1、概述我们知道除了静态内存和栈内存外,每个程序还有一个内存池,这部分内存被称为自由空间或者堆。程序用堆来存储动态分配的对象即那些在程序运行时分配的对象,当动态对象不再使用时,我们的代码必须显式的销毁它们。在C++中,动态内存的管理是用一对运算符完成的:new和delete。new:在动态内存中为对象分配一块空间并返回一个指向该对象的指针;delete:指向一个动态独享的指针,销毁对象,并释放与之关联的翻译 2022-05-09 17:27:20 · 197 阅读 · 0 评论 -
C++exit()函数无法结束进程
exit()函数与_exit()函数最大的区别就在于 exit()函数在调用 exit 系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件。如果程序使用_exit()来结束进程,则不会进行I/O缓存清理,会结束进行。但是_exit()函数直接将进程关闭,缓冲区的数据将会丢失。程序如果写了处理signal信号的函数,那么可能会引起捕捉信号导致无法结束进程,程序进入一种无法结束状态,一直打印堆栈信息。如果程序使用exit()来结束进程,那么在结束前会进行清理I/O缓存的操作,不会立马结束。原创 2023-02-03 16:28:09 · 1449 阅读 · 0 评论