![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 52
觉皇嵌入式
这个作者很懒,什么都没留下…
展开
-
CRC32校验C语言实现(查表法)
【代码】CRC32校验C语言实现(查表法)原创 2024-05-01 22:06:16 · 496 阅读 · 0 评论 -
速速收藏!纯C实现的MD5哈希校验算法~!
速速收藏!纯C实现的MD5哈希校验~!原创 2023-12-03 20:58:37 · 936 阅读 · 0 评论 -
速速收藏!纯C实现的BASE64编解码~!
纯C实现的BASE64编解码~!原创 2023-12-03 20:08:12 · 502 阅读 · 0 评论 -
C/C++实现的MD5哈希校验
C/C++ 实现MD5哈希校验原创 2023-10-24 10:40:39 · 380 阅读 · 0 评论 -
windows下MSYS、MinGW编译环境使用网络API时报错:undefined reference to `inet_pton‘解决办法
windows下MSYS、MinGW编译环境使用网络API时报错:undefined reference to `inet_pton'解决办法原创 2023-08-26 10:28:00 · 1527 阅读 · 2 评论 -
PSM:协议状态机(Protocol State Machine),一款用于流式传输的数据协议解析组件
PSM:Protocol State Machine,协议状态机。一款用于流式传输的数据协议解析组件,可有效解决沾包、断帧问题。PSM以回调函数的形式将完整的协议数据包抛到应用软件层,确保应用软件层收到的数据是一包完整的、有效的数据帧。代码以纯C编写,可无缝在windows、linux、嵌入式单片机、嵌入式RTOS下应用。原创 2023-07-12 10:53:35 · 713 阅读 · 5 评论 -
C/C++ 实现时间戳和时间结构体的相互转换、格林威治与本地时间的转换
时间是具有周期性的,每间隔四年为一个闰年,时间戳是以1970/1/1 00:00:00开始到当前时间的秒数。四年加起来一共365*3+366=1461天。这就是时间周期,后面写程序会用到。原创 2023-01-06 11:56:20 · 1370 阅读 · 0 评论 -
C/C++ Socket UDP 广播消息的发送与接收
对于发送端,如果你只想给某个特定的网段发送消息,例如你的IP地址为192.168.31.107,那么你的广播地址是192.168.31.255,向该广播地址发送广播消息,只有192.168.31.XXX网段下的客户机能收到广播。局域网内全网段广播消息的IP地址为:255.255.255.255,向该IP地址发送广播消息,局域网下的任何网段的客户机都能收到广播。同样,对于接收端,绑定了广播地址0.0.0.0这个IP即可。原创 2022-09-27 09:41:36 · 6494 阅读 · 0 评论 -
GitHub标星4.1w,超火的正则表达式学习教程,速速收藏~
GitHub标星4.1w,超火的正则表达式学习教程,速速收藏~GitHub上有一个非常牛X的项目:learn-regex,目前已经41.7K 星。教程简单易懂、明确,并且还有在线练习,可以有效的帮助各位小伙伴掌握正则表达式的使用,且这个项目被翻译成了多种语言。以下网址为中文说明readme:https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md有的小伙伴上github比较慢甚至进不去,遂搬运至此。转载 2022-05-25 09:46:57 · 884 阅读 · 1 评论 -
Windows平台下MingGW的网络socket编程模型
Windows平台下MingGW的网络socket编程模型1、TCP服务器#include <stdio.h>#include <stdint.h>#include <string.h>#include <winsock2.h>#include <pthread.h>#define LOCAL_IP "192.168.31.254"#define LOCAL_PORT ((uint16_t)10126)#de原创 2022-05-19 13:52:52 · 1246 阅读 · 0 评论 -
利用OpenCV和Python一百行代码快速实现人脸检测和人脸识别
利用OpenCV和Python一百行代码快速实现人脸检测和人脸识别目录利用OpenCV和Python一百行代码快速实现人脸检测和人脸识别1、前言2、准备工作3、OpenCV DNN模块式使用步骤1、前言在2018年的时候,我写过一篇人脸检测和识别的博客,当时对关于人脸的图像识别还没有什么概念,就纯粹是跟上网上的教程做的一个记录,识别方式是利用的SVM(支持向量机)实现的,用的opencv版本为3.0.0,具体可看这里:Opencv人脸识别学习记录。现如今图像类的识别都开始转型为使用深度学习方式,原创 2022-03-14 17:20:55 · 8770 阅读 · 4 评论 -
解决求平均值出现加和导致的溢出问题
看了这篇微软大神发表的长文后发现,原来求平均值也可以这么秀目录看了这篇微软大神发表的长文后发现,原来求平均值也可以这么秀方法一方法二方法三方法四方法五试问求平均值能玩出什么样的花样来?微软大神@Raymond发表了一篇长文,讲述的是关于求平均值的算法。求平均值这很简单,小学时候的知识,无非就是N个数的加和在除以N,再简单不过了。对于无符号的两个数求平均,我们通常这么写:(注:这里uint32_t以32位表示)uint32_t average(uint32_t a, uint32_t b){原创 2022-02-16 10:10:10 · 1243 阅读 · 0 评论 -
C语言标准库里的获取时间函数及时间格式转换详解
C语言标准库里的获取时间函数及时间格式转换详解头文件:#include <time.h>相关库函数(截图摘自:https://www.runoob.com/cprogramming/c-standard-library-time-h.html)相关数据结构:struct tm { int tm_sec; /* 秒,范围从 0 到 59 */ int tm_min; /* 分,范围从 0 到 59 */原创 2021-12-17 14:07:08 · 2169 阅读 · 3 评论 -
基于windows的C/C++串口编程
基于windows的C/C++串口编程下面代码是接收到的数据在发回去的代码。COM2为端口名称,根据实际尽心更改!#include <stdio.h>#include <stdlib.h>#include <windows.h>#define debug(...) printf(__VA_ARGS__)int main(void){ DCB dcb; HANDLE hCom; COMMTIMEOUTS CommTimeouts; DWORD w原创 2021-11-03 13:41:26 · 1933 阅读 · 0 评论 -
C语言向上取整数简单写法
C语言整数除法向上取整#define GET(M,N) ((M - 1) / N + 1)实例:一共100字节的数据,一次发送11字节,需要发送多少次?GET(100, 16) = 7 次原创 2020-12-30 19:39:37 · 3424 阅读 · 0 评论 -
C语言基础:结构体对齐规则与0字节数组
C语言结构体对齐规则与0字节数组@[TOC](C语言结构体对齐规则与0字节数组)C语言结构体对齐规则对齐规则说明C语言结构体对齐规则不同的编译器和系统默认的对齐规则会有差异,这里我使用的32bit的MinGW。对齐规则说明规则一:struct内的第一个成员在偏移地址0处,随后的成员是在其本身字节大小整数倍的地址偏移处。规则二:struct的总大小为结构体内最大成员大小的整数倍示例1:typedef struct{ uint8_t a; uint32_t b; uint8_t c原创 2020-08-03 09:01:30 · 1012 阅读 · 0 评论 -
C语言可变参数的使用方法及嵌入式典型应用printf函数
C语言可变参数的使用方法头文件:#include <stdarg.h>首先定义一个可变参数类型的变量,该变量充当迭代器的作用:va_list it;可变参数开始:va_start(arg1, arg2);参数说明:arg1:va_list类型的变量(迭代器)arg2:函数的最后一个固定参数,例如函数fun(int a, int b, …),那么最后一个固定参数就是b取出可变参数中的变量:va_arg(arg1, arg2);参数说明:arg1:va_li原创 2020-07-15 08:21:39 · 369 阅读 · 0 评论 -
C语言实现格林威治时间转北京时间+根据日期计算星期几
C语言实现格林威治时间转北京时间【北京时间=GMT时间+8小时】日期数据结构定义:typedef struct{ uint16_t year; uint8_t month; uint8_t day; uint8_t hour; uint8_t minute; uint8_t second;}time_t;转换实现:void UTCToBeijing(time_t* time){ uint8_t days = 0; if (time->month == 1 || t原创 2020-07-06 14:13:14 · 2326 阅读 · 0 评论 -
C语言itoa函数实现-数字面值转字符串
数字面值转字符串思路:首先判断是否为负数若是则转为正数,将待转换的int类型值每次对10取余获得最低位的数字,将该数字转为字符面值,然后将int类型值除以10,直到等于0结束循环,此时由于是从int类型值的最低位开始取得,所以转换出来的字符串是反着的,将其逆序即可。对于32位CPU处理器,int类型的最高位是符号位,为0是正数,为1则是负数。例如:正数1,十六进制为:0x00000001,第31位为0,所以是正数。负数-1,十六进制为:0xFFFFFFFF,第31位为1,所以是负数。也就是原创 2020-05-12 09:45:33 · 687 阅读 · 0 评论 -
C语言配置doxygen生成帮助文档
配置doxygen生成C语言帮助文档原创 2020-01-08 11:20:56 · 742 阅读 · 0 评论 -
C/C++实现strstr函数、KMP算法查找子串
unsigned int mystrlen(const void* str){ unsigned int len = 0; const char* p = (const char *)str; while(*p != 0) { len++; p++; } return len;}void* mystrstr(const void* srcstr, const void...原创 2019-12-30 22:58:00 · 966 阅读 · 1 评论 -
C语言哈希表的实现
使用C语言实现HashMap写这个HashMap的最初目的是在单片机上使用,后来就着学习的态度自己就把他完善了一下,HashMap的大小、key的最大长度、value的最大长度都是在头文件中通过宏定义配置。完整代码使用到了:链表(该链表移植自Linux内核中的双向链表)内存管理(自己实现的内存管理,参考正点原子)完整代码:https://github.com/ankun6/Hash...原创 2019-11-29 17:29:09 · 1911 阅读 · 0 评论 -
C语言实现内存池管理可用于嵌入式设备
使用C语言实现内存池并管理C语言标准库malloc函数的效率是很低的,一般在嵌入式设备上是比较要求效率,所以在嵌入式小型系统中,可以开辟一个大一点的数组,通过管理该数组模拟内存释放的功能,以此来提高内存申请和释放的效率。【头文件】/* * malloc.h * * Created on: 2019年11月26日 * Author: AnKun */#ifndef...原创 2019-11-26 21:58:46 · 712 阅读 · 0 评论 -
C语言实现查找一组数中的最大和最小值
查找一组数中的最大、最小值/** * 查找一组数中的最大数 * @param nums 数组指针 * @param step sizeof(type) * @param n 该组数中有几个数 * @return 未找到返回-1,找到返回该数的索引 */int findMax(const void *nums, int step, int n){ ...原创 2019-07-05 10:47:21 · 9410 阅读 · 0 评论 -
C/C++ 实现十六进制面值转字符串、字符面值转十六进制、UNICODE与GBK互转,UTF-8与GBK互转
GBK与UTF8之间是没有关系的,无法直接转换。但是GBK和UNICODE有关系,因为每一个GBK汉字都在UNICODE表中有一个唯一的编号,而UTF8和UNICODE可以直接转换,所以GBK转UTF-8是分两步完成的,步骤如下:原创 2019-06-28 15:28:43 · 4446 阅读 · 4 评论 -
字节序说明并用C语言实现转换
反转字节序之大小端转换什么是大端和小段? ~~~~~~~~ 举个例子,比如int类型的数:0x12345678在内存中的表现形式。1)大端模式:Big-Endian就是高位字节排放在内存的低地址端,低位字...原创 2019-06-21 15:35:12 · 1035 阅读 · 0 评论 -
C/C++语言实现的一个缓存队列
《缓存循环队列的实现》头文件/* * LanJian_Queue.h * * Created on: 2018年9月3日 * Author: AnKun */#ifndef SRC_LANJIAN_QUEUE_H_#define SRC_LANJIAN_QUEUE_H_#define USE_X86 0#if USE_X86#include &amp;amp;amp;amp;amp;amp;amp原创 2018-09-03 17:50:36 · 5666 阅读 · 7 评论 -
C库函数之memcpy的实现
《C语言之memcpy的实现》 &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;a原创 2019-06-21 15:35:54 · 1111 阅读 · 0 评论 -
观察者模式C和C++语言实现
《C语言实现观察者模式》【点这里查看观察者模式基本介绍】 说明: 本例中使用了链表数据结构,该结构移植自linux内核源码的链表,使用方法见我的另一篇博客,地址:【点击此处查看链表使用方法】。 本例程序使用CLion编写,github工程源码地址:【点击此处跳转github下载界面】。原创 2018-01-27 21:45:39 · 3328 阅读 · 3 评论 -
Linux内核链表移植到应用程序中及使用方法
《Linux内核链表移植到应用程序中的使用方法》【程序测试及结果如图】:【基本步骤如下】:1、创建链表和迭代器//--- 创建链表 ---//struct list_head myList;//--- 创建链表迭代器 ---//struct list_head* list_iterator;2、初始化 /**原创 2018-01-27 15:18:57 · 1159 阅读 · 0 评论 -
【C语言】可变参数的使用详解
头文件包含: <stdarg.h>基本使用方法va_list:创建一个指针,该指针指向可变参数,相当于迭代器。va_start(参数一, 参数二):参数一:va_list 创建的指针参数二:最后一个固定参数,例如函数是fun(int x, int y, ...),则最后一个固定参数就是y。va_arg(参数一,参数二):...原创 2018-01-26 21:33:38 · 271 阅读 · 0 评论 -
详解C语言中的常量指针和指针常量
常量指针和指针常量的区别 我区分常量指针和指针常量的的办法是看指针符号*和const关键字的前后顺序,例如constint* p,const在前*在后,所以它是常量指针;在看这个:int* constp,*在前const在后,所以它是指针常量。1、常量指针:指向常量的指针示例: int ival = 0x00; const int* p = &am...原创 2018-01-07 14:58:50 · 1399 阅读 · 0 评论