C/C++
minyuanxiani
这个作者很懒,什么都没留下…
展开
-
crc32校验算法
//=================================================================================================//算法一#define TABLE_SIZE 256//#define CRC_POLY 0x04C11DB7 #define CRC_POLY 0xEDB88320uint32_t CRC_TABLE[TABLE_SIZE] = { 0 };void init_CRC32_table(vo.原创 2020-10-30 17:32:09 · 2536 阅读 · 1 评论 -
crc16几种标准校验算法及c语言代码
一、CRC16校验码的使用 现选择最常用的CRC-16校验,说明它的使用方法。 根据Modbus协议,常规485通讯的信息发送形式如下: 地址 功能码 数据信息 校验码 1byte 1byte nbyte 2byte CRC校验是前面几段数据内容的校验值,为一个16位数据,发送时,低8位在前,高8为最后。 例如:信息字段代码为: 1011001,校验字段为:1010。 发送方:发出的传输字段为: 1 0 1 1 0 0 1 1 0 10 信息字段 校验字...转载 2020-10-28 11:06:34 · 2558 阅读 · 0 评论 -
蝶形变换
u8 ReverseAByte(u8 dat)//12345678变 87654321{ u8 tt; tt=dat; tt=(tt>>4)|(tt<<4); tt=((tt&0xcc)>>2)|((tt&0x33)<<2); tt=((tt&0xaa)>>1)|((tt&0x55)<<1); return tt;}原创 2014-08-17 21:54:22 · 1594 阅读 · 0 评论 -
C/C++用strncpy()与strstr()分割与匹配查找字符串
一、strncpy()char * strncpy ( char * destination, const char * source, size_t num );strncpy() 在 <string.h>头文件中(C++中为<cstring>),拷贝原字符串S中长度为num的部分至目标字符串D中。#include <stdio.h>#inc...转载 2018-09-20 15:52:03 · 624 阅读 · 0 评论 -
__align(n)、#pragma pack(n)和__attribute__((aligned(m)))的区别
__align :关键字指示编译器在 n 字节边界上对齐变量。是一个存储类修饰符。它不影响函数的类型。__align(n)由于 __align 是存储类修饰符,因此不能将其用于: 类型,包括 typedef 和结构定义函数参数。 只能进行过对齐。也就是说,可以将两个字节的对象按 4 个字节对齐,而不能将 4 个字节的对象按两个字节对齐。pragma pac...原创 2018-09-11 16:01:01 · 2902 阅读 · 0 评论 -
结构体的应用
typedef enum eExVideoInTypeTag{ CH7026_480P_50, CH7026_480P_60}eExVideoInType;typedef struct tExVideoRegCfgListTag { BYTE addr; BYTE cont;}tExVideoRegCfgList;typedef struct tExVideoCfgIndexT原创 2014-08-20 20:26:52 · 698 阅读 · 0 评论 -
union的用法
/*定义结构体*/struct strbit{ BYTE b0:1; BYTE b1:1; BYTE b2:1; BYTE b3:1; BYTE b4:1; BYTE b5:1; BYTE b6:1; BYTE b7:1;};union char_bit { BYTE charf; struct strbit bitf;};union char_bit { BYT原创 2014-05-28 18:02:08 · 733 阅读 · 0 评论 -
引用 彻底说明二维数组数组名和指针的关系
#include void main(){ int a[2][3]={1,2,3,4,5,6}; int b=0; int c=0;// b=*((int*)&a[1]+2); //OK// b=*(a[1]+2);//ok// b=*(*(a+1)+2);//ok b=*((int*)((i转载 2014-05-28 17:48:27 · 778 阅读 · 0 评论 -
解析C语言中的sizeof
一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 二、sizeof的使用方法 1、用于数据类型 sizeof使用形式:sizeof(type) 数据类型原创 2014-05-28 17:46:41 · 485 阅读 · 0 评论 -
堆和栈的区别
最近太过执着于一些底层概念,《堆和栈的区别》这篇经典的博文已经被转载过N次,但还是转到这里,以方便日后查阅。谨对原创表示感谢!一、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行转载 2014-05-28 17:50:26 · 555 阅读 · 0 评论 -
详解C中volatile关键字
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;vo原创 2014-05-28 17:49:13 · 497 阅读 · 0 评论 -
C语言中的指针与多维数组
c语言把二维数组看作是一维数组的集合,即二维数组是一个元素为一维数组的特殊一维数组不带任何下标的二维数组名表示二维数组的起始地址.只带一维下标的二维数组名表示作为其元素的一个一维数组(即二维数组一行)的起始地址,对其进行加法操作时表示该一维数组(即二维数组一行)的一个元素的地址。例: int a[4][5],*p; p=a[0];此时p指向一维数组a[0]的起始地址,即p、a原创 2014-05-28 17:47:32 · 853 阅读 · 0 评论 -
struct用法深入探究
1. struct的巨大作用 面对一个人的大型C/C++程序时,只看其对struct的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大型的C/C++程序,势必要涉及一些(甚至大量)进行数据组合的结构体,这些结构体可以将原本意义属于一个整体的数据组合在一起。从某种程度上来说,会不会用struct,怎样用struct是区别一个开发人员是否具备丰富开发经历的标志。 在网络协议、转载 2014-05-28 17:45:26 · 654 阅读 · 0 评论 -
关于typedef用法总结
不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,以下是引用的内容(红色部分是我自己写的内容)。用途一:定义一种类型的别转载 2014-05-28 17:42:03 · 569 阅读 · 0 评论 -
const用法的解惑
const是C++的关键字之一,与其他的关键字相比,C++初学者可能对于const的使用会一时摸不着头脑,若能正确的使用const,将使你的程序更加Robust!先看下面的一些代码: int i = 5; const int *ip = &i; int const *ip = &i; int* const ip = &i; const int* con原创 2014-05-28 17:43:58 · 706 阅读 · 0 评论