前言
根据开发需要决,用 char 时,数组每个元素的 字长与存储单元 是1个byte(16进制2位,2进制8位)。而用int时,数组每个元素的 字长与存储单元 是4个byte(16进制8位,2进制32位)。现存放 16进制2位数,例如 0x3F, 0x06 之类,用 char 型足够了。若改用 int 型 当然也可以,只是浪费了 存储空间,因数位多,运算,读写也要多费时间。
一、嵌入式开发过程中常遇到的数据类型
C语言中int8_t、int16_t、int32_t、int64_t、uint8_t可以区别为int一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是一种新的数据类型。因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码。
int8_t : typedef signed char; //one byte = 1*8 bits
uint8_t : typedef unsigned char; //0~255
int16_t : typedef signed short ; // two bytes = 2*8 bits
uint16_t : typedef unsigned short ; //0~65,535
int32_t : typedef signed int; // four bytes = 4*8 bits
uint32_t : typedef unsigned int; //0~4,294,967,295
int64_t : typedef signed long; // 8 bytes = 8*8 bits
uint64_t : typedef unsigned long; //0~18,446,744,073,709,551,615
提示:char最少是8-bit,short 最少是16-bit,而long最少是32-bit,int根据编译器的不同有16-bit也有32bit的。另外sizeof()函数的返回值是byte。
#ifndef NUL
#define NUL '\0'
#endif
int a = 0;
int *p = NULL;
char str[a];
length = strlen() // 计算长度直到出现 '\0' 为止。
二、关于printf的使用
int a;
a=10;
printf("%d", a);
十进制:%d
八进制:%o
十六进制:%x
显示各进制前缀:%#o, %#x以及%#X
三、8bits 低 -> 高位互换 (00010001 - > 10001000)
#ifdef SPI_FIRSTBIT_LSB
str[i]=(str[i]<<4)|(str[i]>>4);
str[i]=((str[i]<<2)&0xcc)|((str[i]>>2)&0x33);
str[i]=((str[i]<<1)&0xaa)|((str[i]>>1)&0x55);
#endif //SPI_FIRSTBIT_LSB