- 博客(65)
- 资源 (24)
- 收藏
- 关注
原创 C/C++ 基本数据类型介绍
这些类型在C语言和C++中都是可用的,它们提供了一种跨平台的方式来定义固定宽度的整数类型,这对于编写可移植代码和处理特定宽度的二进制数据非常有用。C++通过包含相应的头文件(如。综上所述,C语言和C++共享一套丰富的数据类型系统,这些数据类型为编程提供了灵活性和跨平台的能力。在编写可移植代码和处理特定宽度的二进制数据时,固定宽度的整数类型尤其有用。值得一提的是,虽然上述提到的所有数据类型都起源于C语言,但C++也完全支持它们,并提供了相应的头文件(如。),可以直接使用这些类型。
2024-04-11 16:20:17 461
原创 C语言 获取系统时间
是C语言中表示时间的数据类型,通常用于存储从1970年1月1日(称为UNIX纪元)到当前时间的秒数。接下来,根据不同的编译器环境,使用不同的方法来获取系统时间。例如,你可以将一个时间戳转换为本地时间,然后提取其中的年、月、日等信息。是 C 语言中定义的一个结构体,用于表示日期和时间。这段代码是一个用于获取系统时间的函数。函数将时间信息格式化为字符串,并存储在。函数将时间信息格式化为字符串,并存储在。最终,函数将格式化后的时间字符串存储在。函数获取当前系统时间,并将其存储在。函数将其转换为本地时间。
2024-04-10 10:28:15 586 1
原创 安装最新的wxPython和Python3并保证二者兼容
通过以上步骤,你应该能够成功安装最新且与Python3兼容的wxPython。如果在安装过程中遇到任何问题,可以参考官方文档或社区论坛寻求帮助。
2024-03-30 15:37:14 865
原创 VS2017如何配置成像VS2010那样跳转文件后自动保持打开状态
我在 Visual Studio 2017 中注意到,当您通过“转到定义/f12”打开文档时,该文档只是暂时打开,一旦您离开该文档,它就会再次关闭。现在您必须点击标签中的“保持打开状态”图标。如何像以前版本的 Visual Studio 一样自动“保持打开”所有这些文件?
2023-09-05 16:06:47 204 1
原创 介绍 std::vector 的 operator[]
操作符只能访问指定的元素operator[]返回对指定位置的元素的引用。不执行边界检查。与不同,此运算符从不向容器中插入新元素。通过此运算符访问不存在的元素是未定义的行为。
2023-05-12 15:59:50 241 1
原创 VS调试技巧
运行软件demo.exe,用vs打开生成 xxx.dll 的工程,选择 “调试”->“附加到进程” 然后在打开的对话框里的“选择进程”里选择。这样就能直接调试xxx.dll工程中的代码了,但必须要保证当前工程代码 和 软件安装目录下的xxx.dll 相匹配。软件运行出现崩溃,根据崩溃信息发现崩溃在底下的某个dll中,具体位置和原因未知。命令:C:\Program Files\demo\demo.exe。必须保证“工作目录”中的xxx.dll与当前工程代码 相匹配。
2022-09-17 11:53:55 476
原创 C语言【隐式类型转换】和【显式类型转换】
C语言是一种强类型语言,当使用一种类型代替另外一种类型进行操作时或者存在两个不同类型的对象进行操作时,首先就得进行类型的转换然后再说其他。而类型转换的方式一般可分为隐式类型转换(也称:自动类型转换)和显示类型转换(也称:强制类型转换),两者有着本质上的区别。隐式类型转换是由编译器自动进行的,不需要人为的干预,而且我们也观察不到类型是如何进行转换的,所以被称为:“ 隐式 ”。而显式类型转换是由程序员明确指定的,所以才被称为:“ 强制类型转换 ”。
2022-09-16 14:14:12 2669
原创 记录一个音频PCM数据由双声道转单声道出错问题
在计算左右声道的对应样点均值时,样点必须使用 s16 表示,禁止使用 u16表示,因为u16会导致计算出错,从而产生大噪声问题!综上分析,正常的声音波形是在样点值接近0的时候发生突变的,变成极大值或极小值(即:绝对值接近 32768 = 2^15)工作需要将一份 双声道的PCM数据转换成单声道数据,我采用的是将左右声道样点值对应相加求平均样点值的办法。我们在上面计算左右声道样点值的均值时,是用 u16 来表示样点值的,这种表示方法在计算均值时出问题了!因为用 u16 来表示样点值的,导致在计算均值时出错!
2022-09-16 11:21:27 557
原创 设置软件有效许可期(设置截止时间)
一些软件经常有许可使用期限,到了某个时间就会过期,软件就不能正常使用了!那么如何增加一个设置软件过期时间的功能呢?
2022-07-24 18:11:17 3695
原创 ALSA 中 hw 和 plughw 的区别
可以通过mediainfo查看文件信息,发现为1通道格式,而Codecdriver是需要播放的2channel的,所以需要plug转换为2channel才可以播放.insertssamplerateandformatconversionplugins,ifneeded.//经过采样率和格式转换插件。接口,程序员不必过多关心硬件,而且如果设置的配置参数和实际硬件支持的参数不一致,ALSA会自动转换数据。接口,我们就必须检测硬件是否支持设置的参数了。......
2022-07-15 09:11:13 1627
转载 比memcpy更快的内存拷贝
偶然间看到一个叫xmemcpy的工具,用做内存拷贝。号称在拷贝120字节以内时,比glibc提供的memcpy快10倍,并且有实验数据。这让人感觉很诧异。一直以来都觉得memcpy是很高效的。相比于strcpy等函数的逐字节拷贝,memcpy是按照机器字长逐字进行拷贝的,一个字等于4(32位机)或8(64位机)个字节。CPU存取一个字节和存取一个字一样,都是在一条指令、一个内存周期内完成的。显然,按字拷贝效率更高。那么,这个xmemcpy是靠什么来实现比memcpy“快10倍”的呢?...
2022-07-04 09:45:53 760
原创 Xshell 设置禁止自动滚动
问题描述在使用Xshell过程中,我们有时需要截图或复制某一段打印,但是Xshell默认打印日志时滚动到底部,这样我们在终端持续打印日志的情况下,就不好复制或截图了。解决方法文件 -> 属性 -> 终端 -> 高级 输入/输出终端时滚动到底部(L) #取消勾选 按键滚动到底部(O) #建议勾选图示Xshell默认设置:修改后:...
2022-03-21 13:48:34 3609 2
原创 多个线程一起创建时,某些线程的线程函数参数被篡改
公司某个程序需要在启动时创建多个线程,我们使用for循环来一起创建,结果某些期望的线程一直创建不成功!关键代码如下:enum en_TaskId{ TaskId_AudCap = 0, TaskId_AudPly, TaskId_AudTest, TaskId_AudMsg, TaskId_AudSrpAndBeam, AudioTaskNum = 5};// 创建 5 个线程void create_thread(){ pthread_t thread; for(u32
2022-02-28 10:50:44 488
原创 PCM转换成WAV
1 音频格式简介AudioRecord录制的音频文件格式为PCM,MediaPlayer无法播放PCM格式文件,AudioTrack可以播放PCM格式文件。PCM(Puls Code Modulation)全称脉码调制录音,PCM录音就是将声音的模拟信号表示成0,1标识的数字信号,未经任何编码和压缩处理,所以可以认为PCM是未经压缩的音频原始格式。PCM格式文件中不包含头部信息,播放器无法知道采样率,声道数,采样位数,音频数据大小等信息,导致无法播放。PCM格式缺少头部信息,支持的播放器有限,所以一般
2021-08-10 19:48:34 4548
原创 C++单例模式(线程安全、内存释放)
一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread safety.使用double-check来保证thread safety.但是如果处理大量数据时,该锁才成为严重的性能瓶颈。1、静态成员实例的懒汉模式:class Singleton { private: static Singleton* m_instance; Sin
2021-07-22 14:29:59 1351 3
原创 记录 markdown编辑器使用说明
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2021-01-14 15:27:30 73
原创 C/C++ 内存对齐(一):结构体
内存管理是C/C++编程非常重要的一部分内容,熟悉C/C++中一些常见数据结构和数据类型的内存分布情况,可以很大程度上降低了coding过程中内存泄漏和越界等比较严重的内存问题,下面主要讨论一下结构体(类中同样存在内存对齐,内存对齐会复杂一些,涉及到虚表等问题,后面介绍类的时候会提到)中的内存对齐问题。
2020-11-30 17:27:29 294
原创 va_start 用法
1. 在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表void foo(...);void foo(parm_list,...);这种方式和我们以前认识的不大一样,但我们要记住这是C中一种传参的形式,在后面我们就会用到它。2. 函数参数的传递原理函数参数是以数据结构:栈的形式存取,从右至左入栈。首先是参数的内存存放格式:参数存放在内存的堆栈段中,在执行函数的时候,从最后一个开始入栈。因此栈底高地址,栈顶低地址,举个例子如下:void func(int x, fl
2020-11-10 14:41:14 4729 1
原创 大小端(网络字节序)等概念
1.大小端定义大端存储模式:是指数据的低位字节序保存在内存的高地址中,而数据的高位字节序保存在内存的低地址中小端存储模式:是指数据的低位字节序保存在内存的低地址中,而数据的高位字节序保存在内存的高地址中例如:16bit宽的数0x0001在CPU内存中的存放方式(假设从地址0x4000开始存放)为:内存地址0x40000x4001存储内容(大端)0x000x01存储内容(小端)0x010x00大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保
2020-11-03 09:37:53 7655
原创 RMS 计算音频PCM能量
评估音频能量,音频PCM数据通过RMS计算出 dB值下面使用 16bit位深 的PCM数据计算dB值#define EPSILON 1e-6const int kMinLevel = 127;const double kMaxSquaredLevel = 32768.0 * 32768.0;u32 RMS(s16* pBuf, u32 dwDataLen){ if (pBuf == NULL || dwDataLen == 0) { return kMinLevel; } u
2020-10-28 17:25:37 2936 1
原创 计算时间间隔
Windows TimeWindows time is the number of milliseconds elapsed since the system was last started. This format exists primarily for backward compatibility with 16-bit Windows. To ensure that applications designed for 16-bit Windows continue to run successf
2020-10-27 13:35:40 306
原创 获取时间 Windows API
时间是一个非常重要的信息,比如写LOG时,就需要把时间输出来,跟踪程序是什么时候出错的。或者当你开发一个银行交易系统时,就要记录当前交易的时间,以便后面可以输出报表,打印给信用卡用户。根据不同的需求,可能需要使用不同的时间,目前有UTC和本地时间。UTC是格林威治时间,也就是全球标准时间。本地时间就是相对于UTC而言的,比如中国北京是在东8区,相对于UTC就多了8个小时。一般使用到的时间都是使用本地时间,也就是调用函数GetLocalTime。获取UTC时间:void GetSystemTime(
2020-10-23 15:43:04 2336
转载 C++ 初始化列表
何谓初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在C++中,struct和class的唯一区别是默认的访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示。struct foo{ string name ; int id ; foo(string s, int i):name(s), id(i){} ; // 初始化列表};构造函数的两个执行阶段
2020-10-13 15:49:47 119
转载 C++ 初始化列表
初始化列表是啥?构造函数初始化列表以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个数据成员后面跟一个放在圆括号中的初始化式。构造函数初始化式只在构造函数的定义中而不是声明中指定。struct foo{ string name; int id; foo(string s, int i):name(s), id(i){} ; // 初始化列表};用class和struct关键字定义类的唯一差别在于默认访问级别:默认情况下,struct的成员为public,而class的成员为pr
2020-10-13 14:19:34 122
原创 C/C++程序内存的各种变量存储区域和各个区域详解
C语言在内存中一共分为如下几个区域,分别是:1. 内存栈区: 存放局部变量名;2. 内存堆区: 存放new或者malloc出来的对象;3. 常数区: 存放局部变量或者全局变量的值;4. 静态区: 用于存放全局变量或者静态变量;5. 代码区:二进制代码。知道如上一些内存分配机制,有助于我们理解指针的概念。C/C++不提供垃圾回收机制,因此需要对堆中的数据进行及时销毁,防止内存泄漏,使用free和delete销毁new和malloc申请的堆内存,而栈内存是动态释放。全局变量、静态局.
2020-09-27 14:44:23 3270
转载 Windows系统版本判定那些事儿
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言本文并不是讨论Windows操作系统的版本来历和特点,也不是讨论为什么没有Win9,而是从程序员角度讨论下Windows获取系统版本的方法和遇到的一些问题。在Win8和Win10出来之后,在获取系统版本时,可能很多人都碰到了类似的问题,为什么以前工作得很好的API,突然开始说谎了?提示:以下是本篇文章正文内..
2020-09-08 09:50:53 718
原创 获取Windows操作系统版本
获取PC Windows系统版本:下面是具体实现:bool GetOsVersion(int* major, int* minor, int* build) { OSVERSIONINFO info = {0}; info.dwOSVersionInfoSize = sizeof(info); if (GetVersionEx(&info)) { if (major) *major = info.dwMajorVersion; if (minor)
2020-09-02 15:36:43 777
原创 const、static变量存放位置
我们将以下面的例子介绍const变量和static变量的存放位置:static int val_a = 1 ; // 初始化的静态变量 static int val_b ; // 未初始化的静态变量 int val_c = 2 ; // 全局变量 int val_d ; // 未初始化的全局变量const int val_e = 3 ; // const 全局变量 int main(){ static int val_f =
2020-08-28 14:11:13 1284
原创 WebRTC 桌面共享:
webrtc m74 desktop capture 代码分析:\webrtc\modules\desktop_capture\window_capturer_win.cc/* * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found ..
2020-06-09 18:42:00 1939 1
转载 CreateThread与_beginthreadex本质区别
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中到底应该使用CreateThread还是_beginthreadex?使用多线程其实是非常容易的,下面这个程序的主线程会创建了一个子线程并等待其运行完毕,子线程就输出它的线程ID号然后输出一句经典名言——Hello World。整个程序的代码非常...
2020-06-08 15:28:52 147
原创 C++智能指针
内存管理是C++中的一个常见的错误和bug来源。在大部分情形中,这些bug来自动态分配内存和指针的使用:当多次释放动态分配的内存时,可能会导致内存损坏或者致命的运行时错误;当忘记释放动态分配的内存时,会导致内存泄露。所以,我们需要智能指针来帮助我们管理动态分配的内存。其来源于一个事实:栈比堆要安全的多,因为栈上的变量离开作用域后,会自动销毁并清理。智能指针结合了栈上变量的安全性和堆上变量的灵活性。引言考虑下面一个函数:void someFunction(){ Resource* ptr =
2020-06-04 10:32:39 192
转载 从4行代码看右值引用
概述 右值引用的概念有些读者可能会感到陌生,其实他和C++98/03中的左值引用有些类似,例如,c++98/03中的左值引用是这样的:int i = 0;int& j = i; 这里的int&是对左值进行绑定(但是int&却不能绑定右值),相应的,对右值进行绑定的引用就是右值引用,他的语法是这样的A&&,通过双引号来表示绑定类型为A的右值。通过&&我们就可以很方便的绑定右值了,比如我们可以这样绑定一个右值:int&&a
2020-06-03 16:41:15 165
转载 浅谈 C++ 中的 new/delete 和 new[]/delete[]
在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢?new 和 delete 是函数吗? new [] 和 delete [] 又是什么?什么时候用它们? 你知道 operator new 和 operator delete 吗? 为什么 new [] 出来的数组有时可以用 delete 释放有时又不行? …如果你对这些问题都有疑问的话,不妨看看我这篇文章。new 和 delete 到底是什么?如果找工作的同学看一些面试的书,我相信都
2020-05-29 16:50:42 370
C++ and the Perils of Double Checked Locking.zip
2021-07-22
Windows Media ASF View 9 Series 1.0
2018-11-07
发包工具(内有使用文档)
2018-10-26
《提高C++性能的编程技术(译本)》.pdf (译:左飞)
2018-10-26
C++设计模式(经典版).pdf
2018-10-15
《Windows核心编程(第5版)》pdf(高清电子版+有目录)
2018-08-16
Windows程序设计(第五版).pdf (高清电子版+有目录)
2018-08-16
DXVA Checker v4.0.0(显卡硬件加速检测工具)
2018-08-16
MediaInfo (音视频文件检测)
2018-08-16
Intel_Media_SDK_2017_R1.msi
2018-08-16
yuvplayer.exe (YUV序列播放器)
2018-08-16
GitlHEVCAnalyzer_win32_v1.5.1(H265码流分析工具)
2018-08-16
Visual_Assist_X_10.9.2089_Crack(完美破解版)
2018-08-08
CoolEditPro破解版
2018-08-06
Depends工具
2018-08-06
clumsy 0.2 网络调试工具(含32位和64位)
2018-08-06
Procexp工具(含32位和64位)
2018-08-06
CPU-Z(含32位和64位)
2018-08-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人