
c语言
jiang_2018
这个作者很懒,什么都没留下…
展开
-
static struct、typedef struct
今天看到这样的写法,有点蒙,如下static struct{ char a; char b;} hrpsCb;测试程序如下#include <stdio.h>static struct{ char a; char b;} hrpsCb;int main(){ hrpsCb.a = 1; hrpsCb.b = 2; printf("Hello, World! %d %d\n",hrpsCb.a,hrpsCb.b); return 0;}原创 2020-12-09 10:51:16 · 6243 阅读 · 1 评论 -
intptr_t和uintptr_t
看代码看到intptr_t和uintptr_t类型,有些不明白,查找后总结如下参考http://www.cnblogs.com/Anker/p/3438480.html这2个类型定义如下/* Types for `void *' pointers. */#if __WORDSIZE == 64#ifndef __intptr_t_definedtypedef long int intptr_t;#define __intptr_t_defined#endiftypedef unsign原创 2020-11-13 11:47:21 · 3392 阅读 · 0 评论 -
C语言位域在驱动编写中的应用
场景比如有以下寄存器0111 0110-》1011 0110想把func1(2bit)赋值成10,一般这样写:data = reg;data |= (1<<7);data &= ~(1<<6);reg = data;位域操作有位域就可以这样操作1.在h文件定义寄存器#define REG_ADDR 0x15Utypedef struct { uint8_t func1 : 2; uint8_t func2 : 1;原创 2020-08-29 20:09:07 · 204 阅读 · 0 评论 -
# 、##、 __VA_ARGS__、##__VA_ARGS__理解
参考https://www.cnblogs.com/zhujudah/archive/2012/03/22/2411240.htmlhttps://www.iteye.com/blog/201304182648-2198134#字符串化(stringizing)#incldue <stdio.h>#define PSQR(x) printf("the square of" ...原创 2020-01-18 09:38:28 · 576 阅读 · 0 评论 -
va_list、va_start、va_arg、va_end
c语言实现可变参数的方式是利用函数参数入栈从右到左的的顺序,如果知道任意参数地址,且知道参数类型,则可以通过指针移动取出参数值。比如函数void fun(int a,int x,int y,int z)入栈顺序如下再看va_list、va_start、va_arg、va_end,这几个是定义在stdarg.h的宏定义typedef char* va_list;#define _INTSI...原创 2019-08-28 18:13:01 · 307 阅读 · 0 评论 -
C语言操作文件生成数组
有这样一种需求,在做web 配网时需要把网页图片等文件转换成数组文件,并且根据路径等信息生成查找这些数组的文件,下面c语言是我写的一个例子。//filename :make_web_file.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include "dirent.h" ...原创 2019-04-24 12:56:36 · 1252 阅读 · 0 评论 -
C语言操作二进制文件
有这样一种需求,在做OTA升级文件时需要根据本地编译生成的bin文件计算出一个头信息加再本地编译生成的bin文件头部组成一个新的bin文件放在服务器上,下面c语言是我写的一个例子。// filename: make_ota_bin.c#include<stdio.h>#include<stdlib.h>#include<string.h>#defin...原创 2019-03-29 11:54:59 · 3128 阅读 · 0 评论 -
字符串转换成数组
在做OTA时,从服务器下载下来的bin文件的md5信息是一串字符串,在做比较时先要把字符串转换成数组,这里记录下,避免重复写。例如:把 hexstr = “fc412acb03bd5f2d2439a5a3b58e01a7”;转换成hexarray[strlen(hexstr)/2] = {0xfc,0x41,0x2a,0xcb,0x03,0xbd,0x5f,0x2d,0x24,0x39,0x...原创 2019-04-02 17:12:21 · 6074 阅读 · 0 评论 -
函数指针在结构体里的赋值与调用
#include &amp;amp;lt;stdio.h&amp;amp;gt; //定义函数指针结构体类型typedef struct test { void (*a)(int a,int b); void (*b)(void); void (*c)(void); }test; //编写函数实现void f1(int a,int b){ p...原创 2019-02-18 15:29:36 · 3405 阅读 · 0 评论 -
字符串ip地址和数值ip转换
#include <stdio.h>#include <string.h>#include <arpa/inet.h>//形如"192.168.2.1"转换到数组和主机字节序/*typedef uint32_t in_addr_t;struct in_addr{ in_addr_t s_addr;};ip地址合法性a.4个数字不能大于255...原创 2019-02-22 00:42:54 · 2951 阅读 · 0 评论 -
数组指针和指针数组
请看下面2个表达式int *p[3];int (*p)[3];前面是指针数组,后面是数组指针 一张图你就懂了 int *p[3] 是这样看待的: p[3]是第1部分,这显然是个数组,于是编译器为你分配一块内存,这块内存有3个坑,就是可以放3个变量。 int*是第2部分,他表明刚才提到的3个坑里放的变量是int *类型,即是指向int类型的指针,综上是指针数组。int (*...原创 2018-09-11 00:20:25 · 405 阅读 · 0 评论 -
const型指针
看下面这三个表达式:const int *p = &amp;a;//1int const *p = &amp;a;//2int *const s = &amp;a;//3const的意思是修饰只读变量,这句话是不是感觉矛盾,一个变量,但是是只读的。但就是这样的。 //1和//2是一样的,都是修饰int,就是说p所指向的变量相对于指针p本身是只读的,就是你不能通过p修改a的内容,只...原创 2018-09-12 21:11:17 · 300 阅读 · 0 评论 -
常用C语言字符处理函数(部分源码实现,持续补充)
常用C语言字符处理函数(持续补充)这篇记录我常用的C语言字符处理函数,有用到新的就更新补充1.strchr原型 :char *strchr(const char *s,char c); 解释:查找字符串s中首次出现c的位置的指针,不存在则返回NULL 头文件:#include &amp;amp;amp;amp;lt;string.h&amp;amp;amp;amp;gt; 例子:char *url = &amp;amp;amp;q原创 2018-06-06 14:01:15 · 1206 阅读 · 2 评论