C语言中的int8_t,uint8_t, int16_t,uint16_t, int32_t,uint32_t, int64_t,uint64_t和int数组,char数组以及sizeof()的理解


前言

根据开发需要决,用 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
  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值