C++
Acuity.
只要思想不滑坡,想法总比问题多。
展开
-
Linux下/Qt UTF-8转GB2312
1.背景项目需要用到热敏打印机,控制接口为串口(RS232),运行环境为Linux+Qt。在此之前,在MCU平台的实时系统(RT-Thread)上已经实现出正确的打印功能,原则上把代码移植过来,调整下打印位置、字体大小等即可。代码移植后,运行结果是英文、数字打印正常,中文打印则出现乱码。现有的配置情况是,热敏打印机提供的英文、数字字库是ASII格式,中文字库是GB2312格式,平台控制端采用U...原创 2017-11-14 09:29:26 · 2671 阅读 · 0 评论 -
C/C++关于基本数据类型的使用
对于一门编程语言来说,在使用或者新接触时,我们首要了解的是其提供的数据类型,而C语言作为高级语言的基础,所以也是编程者必须掌握的语言。C语言提供的基本数据类型有:整型(int)、长整型(long)、短整型(short)、字符型(char)、单精度浮点型(float)、双精度浮点型(double),这些类型也是最常用的,不论是底层MCU程序还是上层应用开发。 在程序开发中,会遇到各种C...原创 2018-05-20 00:28:52 · 1392 阅读 · 0 评论 -
C/C++笔试(二)(C库(4)——strcpy实现)
最近面试,笔试试题遇到关于strcpy函数的实现问题,整体实现思路不难,但涉及到一些细节问题,而面试官的主体意思应该也就是考察面试者对于细节处理问题。面试完毕,后面查阅网络上相关答案,发现自己还是考虑不周全,出现细节错误。 题目: 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSr...原创 2018-06-04 00:29:00 · 737 阅读 · 0 评论 -
C/C++编程常引用到的头文件
1.POSIX标准定义的头文件 POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。 ...原创 2018-06-05 20:20:12 · 1970 阅读 · 0 评论 -
字符IP地址和整型数转换
IP(Internet Protocol),IP地址中文名称为互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。 常用的IP地址有IPV4和IPV6,IPV4地址是一个32位的二进制数,通常...原创 2018-07-11 00:11:35 · 5616 阅读 · 0 评论 -
一个变量越界引起的灾难
1.前言 一般地,对于内存块访问(如数组、程序员动态分配的内存块、系统从堆上分配的内存块),通过“下标”形式访问时,如果稍有不留意,对于末尾地址的访问处理不当,则会发生程序异常,轻则导致当然应用程序(进程)异常退出,重则导致整个系统瘫痪。如果是在嵌入式系统里发生,如裸机程序,或者多线程的实时系统(RTOS)中,基本会导致整个系统程序异常退出(死机)。这对于用户来说是“灾难”性事的、不可接受的...原创 2018-09-12 00:40:04 · 2011 阅读 · 0 评论 -
localtime函数在不同平台使用注意
1.写在前面 localtime函数是C语言标准库中时间库“time.h”中获取系统带时区时间的函数,获得的时间最终以“strcut tm”的格式输出。对于通用操作系统如Windows、Linux中调用该函数,那么获得的时间就是带时区的,这一点毫无疑问。而在一些嵌入式场合,我们也需用到将时间戳转换成“年月日时分秒”格式,如不额外自行编写换算函数,可以直接调用该函数。在以往开发非联网或者国内使用...原创 2018-12-17 23:56:28 · 6789 阅读 · 2 评论 -
【Linux网络编程】socket编程“网络字节顺序”和“主机字节顺序”
1.大小端模式 在socket编程前,有必要知道大小端模式。大小端模式是指计算机内存中数据存放的模式,由CPU决定,与操作系统无关。大端模式(Big-endian,是指数据的高字节保存在内存的低地址中,数据的低字节保存在内存的高地址中,这种存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;与我们的阅读习惯一致。小端模式(Little-endian),是指数据...原创 2019-01-13 00:25:33 · 3856 阅读 · 0 评论 -
各大半导体原厂芯片代码仓库(GitHub)
从事嵌入式开发,经常与底层芯片打交道,在使用一个新的芯片时,一般原厂都会提供相关驱动(driver)或者演示例程(demo),也方便我们快速使用该芯片,提高产品开发效率。一般地,原厂提供的代码包括几部分,Android/Linux系统板级支持包,这部分可以直接移植过去使用;Android/Linux驱动,可以移植过去或者参考修改;Android/Linux演示例程,提供用户参考;单片机(MCU...原创 2019-03-31 20:25:04 · 3184 阅读 · 0 评论 -
C语言数组居然有[-1]下标?
1.背景 最近在查阅代码(C)时出现类似“a[-1]”的操作,以过往的经验,觉得是非法的访问数组操作,第一反应就是不存在这样的语句,连编译都通不过。实质上,这是完全没问题的语句,编译和执行都是不存在问题,当然也可能与编译器相关。void fun(char *a){ a++; printf("%c\n",a[-1]);}2.a[-1]涵义2.1 案例分析 “[]”一般用...原创 2019-04-20 00:17:48 · 9768 阅读 · 0 评论 -
持续更新,值得推荐的c/c++开源框架与库
框架Apache C++ Standard Library : 是一系列算法,容器,迭代器和其他基本组件的集合ASL : Adobe源代码库提供了同行的评审和可移植的C++源代码库。Boost : 大量通用C++库的集合。BDE : 来自于彭博资讯实验室的开发环境。Cinder : 提供专业品质创造性编码的开源开发社区。Bxxomfort : 轻量级的,只包含头文件的库,将C++ 11...转载 2019-07-03 22:08:07 · 1188 阅读 · 0 评论 -
字符串解析(C库(3)——strstr实现)
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。 项目需用到有效字符串提取功能,即是strstr函数的功能。一开始的时候,并未联想到strstr函数,所以用C/C++实现了此功能,程序直接调用strstr函数也能正确实现。下面是实现过程。实现方法1:借助streln和mem...原创 2018-04-12 16:57:46 · 1130 阅读 · 0 评论 -
指针函数与函数指针
1.含义 1)指针函数指的是一个函数返回值为指针类型的函数,本质就是个函数。 2)函数指针指的是指向函数的指针变量,本质是一个指针变量。 2.声明和定义 1)指针函数声明 类型关键字 *函数名(参数列表) 例: int *fun(int a,int b); 2)函数指针声明 类型关键字 (*函数名)(参数列表) 例: int (*fun)(int a,int b);...原创 2018-04-16 23:26:12 · 2597 阅读 · 0 评论 -
Qt出现“error: undefined reference to `vtable for peripherals'”及处理方法
1.背景信号和槽是Qt的特色之一,通过信号和槽,可以方便实现数据与界面的交互、线程之间的数据交互等等。项目在新增类中使用到了信号和槽功能,但编译失败,提示“error: undefined reference to `vtable for peripherals'”的错误。2.解决方法遇到问题,首先检查是不是语法问题、常识错误。1)清除编译信息,重新编译;错误依旧;2)清除编译...原创 2017-11-15 10:57:12 · 9984 阅读 · 0 评论 -
C++类模板 template <class T>
类模板与函数模板的定义和使用类似。有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,如下面语句声明了一个类:class Compare_int{public : Compare(int a,int b) { x=a; y=b; } int max( ) { return (x>y)?x:y; } int min( )转载 2017-11-21 15:00:20 · 636 阅读 · 0 评论 -
Qt char*与QString互转
1.char* 转QString方法一:直接用QString的构造函数转换,如下:char* ch = "acuity";QString str(ch);方法二:用QString的静态转换函数获取,如fromUtf8()、fromLocal8bit()、fromUtf16(),如下:char* ch = "acuity";QString str = Qstring::fro...原创 2017-12-11 18:01:11 · 55106 阅读 · 3 评论 -
【组件】通用环形缓冲区模块
写在前面环形缓冲区是嵌入式应用(医疗电子、消费电子、工控)中常用的数据结构模型,如音视频流、通信总线数据收发等。一些操作系统、第三方库都提供现成的环形缓冲区接口API,性能和安全性都有保障,多线程访问互斥机制,空内存访问保护等。1.基本原则先进先出(FIFO),重复使用。2.实现原理环形缓冲区,顾名思义就是一段循环使用的一段内存。通过写指针向“空白内存”(未写入过或者已经被读出...原创 2017-12-26 15:23:53 · 6653 阅读 · 17 评论 -
Qt获取本地ip地址
Qt提供相关获取ip地址的类,可以十分方便获取本机ip地址。QString MainWindow::read_ip_address(){ QString ip_address; QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses(); for (int i = 0; i &...原创 2017-12-27 09:00:00 · 3856 阅读 · 0 评论 -
ARM Linux判断SD卡是否加载成功
1、写在前面ARM-Linux在访问SD卡数据时,严格的步骤,第一步应该是检查SD卡是否被系统成功加载。当然,缺少这一步也不影响,从后面应用层访问操作的返回值也可知道操作状态,但如果在第一部就有检查时,出现问题可以立刻发现。2、判断SD卡加载状态1)通过“sdcard”文件夹Linux下如果加载SD卡成功,在根目录下会生成一个“sdcard”文件夹,SD卡的内容,及用户访问数据,都通过这个文件夹。...原创 2018-01-03 16:49:47 · 8515 阅读 · 1 评论 -
QString类—number
1、写在前面Qt提供非常多使用的工具类,如排序、类型转换、格式转换等。如果是经常使用则信手拈来,否则间隔时间长了,很基础的工具类都需要查看文档或者百度。所以做个言简意赅的记录笔记,增加印象同时方便查阅。2、QString::numberQString::number是将数数字(整数、浮点数、有符号、无符号等)转换为QString类型,常用于UI数据显示。查看API接口,number提供如下几种类型...原创 2018-01-04 17:13:25 · 38550 阅读 · 0 评论 -
C/C++基础笔试(一)
面试时总会遇到一些基础题目,其实也是大部分以往见过或者网上可以搜索到的,都是十分基础的问题,这类问题答对了不会给自己加多少分;但如果答错或者答得不完整,自己在面试官眼里就是基础不牢固的印象。所以好记性不如烂笔头,将遇到的部分笔试题,重新整理答案在博客。题目1: static 作用 答案: 对于C语言来说: 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2...原创 2018-03-07 23:45:35 · 3493 阅读 · 0 评论 -
C++实现String类
最近面试的笔试题,连续两次遇到此题目,作个记录。 题目:用C++实现下面String类中4个函数。class String { public: String(const char *str = NULL);// 普通构造函数 String(const String &amp;other);// 拷贝构造函数 ~String(void);...原创 2018-03-12 18:59:53 · 636 阅读 · 0 评论 -
while(i--)陷阱
1.案例 在访问一段存储空间时使用到“while(i–)”模型代码,抽出主体代码。/** * @brief 获取数据 * @param buf:数据返回地址 size:获取数据长度 * @retval 实际获取的数据长度*/uint32_t read_buf(uint8_t *buf,uint32_t size){ uint32_t temp = 0; u...原创 2019-07-10 22:49:52 · 2864 阅读 · 2 评论