
技术笔记
日常开发中的各种技术总结
fg2fg3
科技企业高级软件工程师,拥有高级项目管理师证书。主要使用C/C++,欢迎交流人工智能,自动驾驶,嵌入式开发相关。
展开
-
人月神话:如何有效的避免Bug的产生
由于缺乏总体设计,几个工程师一勾兑,就开始了各自的开发。而在一开始勾兑的时候,每个人都是基于个人的理解而阐述,这就客观造成了工程师专注于实现,而缺乏整体的考量。细致的功能定义,仔细的规格说明,规范化的功能描述及实施,可以大大减少bug。如果这个工作缺乏架构师完成,就需要擅长沟通的程序员,去对接客户和技术,保证大家在概念上的一致。bug的来源有很多种,一般的小bug很好修复,最头疼的是哪些致命且难以察觉的Bug。这些bug从哪来的?在人月神话书中说:假设的不匹配是大多数致命和难以察觉的bug的主要来源。原创 2025-04-01 20:12:18 · 205 阅读 · 0 评论 -
git使用方法小结
git fetch && git reset --hard 07bc19a60dc222c5f7a2007d10b4c06543282f88(这个ID是log id)git push -f origin/master -f是强制推送的意思。8.git add后想要取消git add的文件。1.如何git push直接推到远程分支?9.新建本地分支,推送到远程分支的套路。2.查看本地版本和远程版本的对应关系。6.git 如何忽略不需要的文件。先建立本地分支和远程分支的关联。3.查看本地和远程分支列表。原创 2023-06-15 12:37:41 · 1164 阅读 · 0 评论 -
c primer plus学习笔记一
c primer plus学习笔记,有很多容易忽略的基础知识点。原创 2023-05-28 08:53:44 · 930 阅读 · 0 评论 -
ECS Windows远程桌面连接被拒绝,因为没有授权此用户帐户进行远程登录问题排查方法
今天在部署服务器的时候,出现了ECS Windows远程桌面连接被拒绝的问题,从网上找到的资料测试成功,列举如下问题描述ECS Windows 服务器远程连接的时候,出现错误:“连接被拒绝,因为没有授权此用户帐户进行远程登录。”,导致无法远程登录服务器(VNC登录不受影响),如下图所示: 问题分析该错误一般是由于 Windows 远程桌面相关权限配置异常导致的。解决转载 2018-06-28 13:35:50 · 2194 阅读 · 0 评论 -
MFC实现从一个窗口向另一个窗口发送消息的两种方法
实现从一个窗口向另一个窗口发送消息,使用过下面两种方法/*方法一:通过用SDK的标准API来查找其他对话框窗口返回句柄,并且发送信息HWND hWnd; //通过SDK的FindWindow函数得到目标窗口的句柄,TriTest为目标串口的Caption的值 if(!(hWnd = ::FindWindow(NULL,"TriTest"))) AfxMessageBox(转载 2018-06-28 13:36:53 · 8713 阅读 · 0 评论 -
uClibc 与 Glibc 你所不知道的区别
CC的标准库,就是glibc这个库,里面有GCC各种标准函数的实现,还有各种unix系的函数在里面。 当初创建uclinux的时候,需要一个能编译比较小体积的目标文件的便宜器,这个时候就有人写了一个uc-libc库,这个库可以说是uclinux上的一个glibc移植,但是还是有很多函数没有实现,所以人们只能勉强用它来在uclinux上写程序。 后来,有牛人又写转载 2018-06-28 13:37:20 · 614 阅读 · 0 评论 -
TCHAR和string的转换
TCHAR 是MFC中的一种数据类型,在<winnt.h>头文件中进行定义string是C++ 标准数据类型,两者在window程序中经常需要相互转换,实例代码如下。std::string TCHAR2STRING(TCHAR *STR){ int iLen = WideCharToMultiByte(CP_ACP, 0, STR, -1, NULL, 0, NULL, NULL)...原创 2018-07-07 22:54:38 · 7295 阅读 · 0 评论 -
string转TCHAR
TCHAR 是MFC中的一种数据类型,在<winnt.h>头文件中进行定义string是C++ 标准数据类型,两者在window程序中经常需要相互转换,实例代码如下。void string2tchar(std::string &src, TCHAR* buf){#ifdef UNICODE _stprintf_s(buf, MAX_PATH, _T("%S"), sr...原创 2018-07-07 22:55:50 · 5820 阅读 · 1 评论 -
16进制串和16进制字符串的转换
我们知道在windows中,每个字符都可以用16进制表示,但是并不是所有字符都可以用string等表示出来,比如看看下面两个字符char buf[2] = {0x00,0x01}char buf2[2] = {0x30,0x31}那么用string转化后是什么结果?std::string(buf) 是个""std::string(buf2) 是"01"从底层收到了buf这种数据在界面展示会是乱码或...原创 2018-07-07 23:03:51 · 1288 阅读 · 0 评论 -
十六进制数组和二进制字符串的相互转换
例如 { 0x23, 0x4A, 0x5E } <=> “001000110100101001011110”/***十六进制数转换成二进制字符串***/void HexToBinStr(unsigned char* hexStr, unsigned char* binStr, int lenHex){ memset(binStr, '0', lenHex * 8);...转载 2018-07-07 23:13:14 · 3152 阅读 · 0 评论 -
ROS分析消息流向等几个有用的指令
ROS通常用在机器人的分布式系统里面,数据收发通过ROScore进行。如果一个节点作为client调用另外一个作为服务的节点,但是服务节点并没有收到响应,如何确定消息是否已经到达服务节点?可以用#rosrun rqt_console rqt_console在桌面版的ubuntu系统中,会出现一个GUI,方便分析。 其他几个有用的东西,试试看有什么效果rosrun rqt_m...原创 2018-08-09 18:42:19 · 462 阅读 · 0 评论 -
opencv里的mat和Qt中的QImage相互转化
cv::Mat QImageToMat(QImage image){ cv::Mat mat; switch (image.format()) { case QImage::Format_ARGB32: case QImage::Format_RGB32: case QImage::Format_ARGB32_Premultiplied: mat = cv::Mat(image...原创 2018-08-07 13:41:37 · 1240 阅读 · 0 评论 -
改变Qt中QLabel,QPushButton的背景颜色
1.在程序中,修改QLabel的背景颜色:QPalette palette;palette.setColor(QPalette::Background, QColor(0, 255, 0));qlabel->setAutoFillBackground(true); //一定要这句,否则不行qlabel->setPalette(palette); 2.在程序中...原创 2018-08-08 19:09:45 · 4465 阅读 · 0 评论 -
Qt浮点型数据出现-nan结果
今天统计数据的时候,发现double数据出现了结果为-nan。经查询,原因如下:浮点型数据开根号等不可知操作会出现-nan,这种无效数据要处理掉。方法使用std::isnan(data),是nan为真,不是为假。无效数据要处理掉。还有一种inf数据,在C++中也有判定接口。 欢迎访问我的文章,点这里拿资料。...原创 2018-08-08 19:16:43 · 11704 阅读 · 0 评论 -
数组在内存管理方面的好处
数组管理内存的优势:1.数组是定长的,只要加了越界限制,不会那么容易崩溃。2.数组管理的资源清晰明了,在一开始就分配好内存空间,不会像增长型容器出现内存不够的情况。3.数组通过下标进行遍历,遍历速度非常快。 比如在界面上管理100个button,就可以直接这样定义然后一次性构造100个buttonCButton m_pbt[100];for(int i=0;i&l...原创 2018-08-27 18:42:02 · 450 阅读 · 0 评论 -
C++四个文件实现压缩解压缩zip文件
压缩和解压缩在开发中很常见,比较知名的第三方库就是zlib。最下的文档中给出了zlib源码的下载地址,感兴趣的朋友可以下载下。我从网上找到了一个很简单的zip,unzip接口,只有四个文件,直接放到工程中就可以用了。下面是两个例子,源码也在最下面的文档中。string2tchar的方法在之前的文章中有。void UtilGui::OnBtZipFileClicked(){ QString qs...原创 2018-07-09 19:43:24 · 17064 阅读 · 4 评论 -
C++字符串比较,不同的字符串为何比较结果相同?
看下面两个数组,转化为C++的string你觉得比较结果应该是怎么样的? char c[] = { 0x00, 0x01, 0x03, 0x04 }; char d[] = { 0x00, 0x01, 0x03, 0x05 };std::string(c)和std::string(d)比较,会不会相等?实验测得,两个相等。为什么?因为两个转化为string后都是空字符串。这里提供一个方法,转化为...原创 2018-07-09 18:11:45 · 915 阅读 · 0 评论 -
MFC中CString,string,char之间的转换
学过MFC开发的人都知道,这三种类型各有各的优点,比如CString比较灵活,是基于MFC常用的类型,安全性也最高,但可移植性最差。string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的;char*是从学习C语言开始就已经和我们形影不离的了,有许多API都是以char*作为参数输入的。所以熟练掌握三者之间的转换十分必要。以下我用简单的图示指出三者之间的关系,并以标号对应转换转载 2016-11-18 13:42:04 · 431 阅读 · 0 评论 -
uClibc 与 Glibc 你所不知道的区别
CC的标准库,就是glibc这个库,里面有GCC各种标准函数的实现,还有各种unix系的函数在里面。 当初创建uclinux的时候,需要一个能编译比较小体积的目标文件的便宜器,这个时候就有人写了一个uc-libc库,这个库可以说是uclinux上的一个glibc移植,但是还是有很多函数没有实现,所以人们只能勉强用它来在uclinux上写程序。 后来,有牛人又写转载 2017-01-05 12:37:10 · 4527 阅读 · 0 评论 -
复习C++:VS2008中的宏干嘛用的
VS2008中有宏,可也进行编辑和设置。好处:1.快速生成代码,帮助开发。2.个人定制化功能,IDE更合适自己用。3.提升编程效率。缺点:使用VB开发,一开始用起来费事。不过有官方参考文档,拷贝粘贴实现。举例:自动填写类构建代码注意:IDE中的宏是为了方便工具的使用,代码中的宏是一种定义。延伸阅读:代码中的宏通常啥用:1.原创 2017-03-19 20:39:55 · 308 阅读 · 0 评论 -
雄迈的netsdk和localsdk区别
雄迈是摄像头大厂,生产IPC/DVR/NVR等的主板以及进行组装,很多摄像头及配套方案使用雄迈的。其SDK我知道的是三种。localsdknetsdk移动端SDKlocalsdk是板上的sdk,封装了板子上芯片级的接口,提供音视频,报警等服务,还有编译工具链。工具链一般是海思的。开发环境是linux系统。netsdk是PC端的SDK,用于管理IPC,NVR等原创 2017-04-07 11:23:31 · 8375 阅读 · 0 评论 -
在多个平台如何安装Python
最近的一个项目,架构师米洛需要用的mqtt,服务器开发的时候,竟然用的python脚本。运行python就需要安装开发环境,好吧,百度一下就知道了大神廖雪峰。以下部分测试通过,转载记录如下。因为Python是跨平台的,它可以运行在Windows、Mac和各种Linux/Unix系统上。在Windows上写Python程序,放到Linux上也是能够运行的。要开始学习Python编程,转载 2017-04-07 23:46:23 · 575 阅读 · 0 评论 -
常见的音视频封装和编码
常见的的音视频封装和编码格式是怎么样的?封装格式的推出机构和领域?封装格式数据结构是什么样的?视频播放器原理播放器在显示上,可以分为DirectShow框架的工具,比如VLC,mplayer;非DirectShow框架的工具,如暴风影音,potplayer哪些工具可以查看音视频文件的信息?Elecard Format Analyer可以看出来原创 2017-04-09 10:45:14 · 630 阅读 · 0 评论 -
webrtc如何进行错误恢复
视频的压缩方法:(三种帧)为了视频尽可能的保持高效,视频数据通过不同的编码进行压缩。以帧为单位进行压缩,按照压缩中的不同作用可分类为:内帧(Intra-frames,I帧),预测帧(Predictive-frames,P帧),和双向预测帧(Bipredictive-frames,B帧)。B帧利用过去的和将来的包进行编码,在实时交互的视频中不会使用。一个I帧包含一个完整的图片(经过空间压缩)转载 2017-04-10 09:07:03 · 961 阅读 · 0 评论 -
海思编译链编译出现__aeabi_unwind_cpp_pr1重定义怎么回事
1.用arm-hisiv100nptl-linux-gcc编译代码,结果发现报错,__aeabi_unwind_cpp_pr1重定义,在librt.a先定义,使用的海思芯片是hi3520d。2.本来以为是编译链冲突所致,工具链删了又装,只保留一个,还是不行,装的是toolchain_hisi_linux_nptl_install.tgz3.后来发现在Hi3520_SDK_1.0.5.0中也原创 2017-03-31 17:32:43 · 1168 阅读 · 0 评论 -
Qt-不调用CoInitialize-实现SDL多线程运行
使用Qt开发程序,参考的MFC的程序中有CoInitialize。结果Qt程序调用不了,导致SDL不能音视频同步。此时SDL的初始化是放在主程序里的。把SDL的初始化部分放到了辅助线程里,运行就正常了,还不需要CoInitialize。用SDL作音视频同步及多线程,在Qt移植太麻烦了,最后还是使用VLC,接口好用。实现多路视频同步播放没有问题。原创 2017-03-31 17:38:50 · 2126 阅读 · 0 评论 -
Ubuntu上hi3531交叉编译环境arm-hisiv100nptl-linux搭建过程
安装SDK1、Hi3531 SDK包位置在"Hi3531_V100R001***/01.software/board"目录下,您可以看到一个 Hi3531_SDK_Vx.x.x.x.tgz 的文件,该文件就是Hi3531的软件开发包。2、解压缩SDK包在linux服务器上(或者一台装有linux的PC上,主流的linux发行版本均可以),使用命令:tar -zx转载 2017-03-31 21:31:55 · 1024 阅读 · 0 评论 -
任务保护机制如何实现的
原创 2017-04-04 09:58:16 · 283 阅读 · 0 评论 -
X86-32位架构的CPU是不是内存只能到4G
不是的,可以通过分页机制扩展实现超过4G内存的支持。什么是分页机制扩展?PAE。什么是PAE?PAE如何实现的?原创 2017-04-04 10:08:05 · 1125 阅读 · 0 评论 -
为什么加了内存条系统会快一些?
加了内存,实际上就是物理内存多了,就不用复制到硬盘,从而读取速度就快了。工作集管理器被谁管理?内存管理器除了工作集管理器(优先级16),还有哪些线程?进程、栈交换(优先级23)已修改页面写出器(优先级17)映射页面写出器(优先级17):超过阈值,5分钟以上未写入磁盘解引用段线程(优先级18):缓存回收。零页面线程(优先级0):可防止安全信息被泄露。大内存申请不需原创 2017-04-04 22:46:23 · 1919 阅读 · 0 评论 -
Qt中文路径乱码问题解决
在windows开发中,中文桌面版本的默认字符集是GBK2312,如果要显示文件路径的时候,路径中带中文,如果不经过转码处理,就会导致找不到文件。解决方法中的一个就是使用QTextCodec。 QString qslPath = QFileDialog::getOpenFileName(this, "D:/", "*.*"); ui.m_pLbPath->setText(qslPath); ...原创 2018-07-09 18:01:08 · 2842 阅读 · 0 评论 -
我个人珍藏的C++资料汇总
个人精心筛选的125本书籍原创 2016-09-29 10:06:13 · 557 阅读 · 1 评论