根据开发需要决,用 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
                    C语言中的int8_t,uint8_t, int16_t,uint16_t, int32_t,uint32_t, int64_t,uint64_t和int数组,char数组以及sizeof()的理解
                    C语言中的数据类型理解前言前言根据开发需要决,用 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、i
				
这个问题大致是这样的,本来试图写一个产生低8位为1的掩码的语句: uint32_t mask = ~((uint8_t)0); ,结果发现算出的掩码是 0xffffffff 显然不符合预期,于是折腾检查了一番,写出对比程序如下: #include <stdint> #include <iostream> using namespace std; int main() uint8_t z = 0; uint32_t x = ~(uint8_t)0; uint32_t y = (uint8_t)~0; cout << typeid(~(uint8_t)0).name()
工作经常碰到int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t等数据类型,所以有必要对此进行梳理。 int_t同类 int_t 为一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是一种新的数据类型。因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码。
听说这个有用 The following are typedefs of fundamental integral types or extended integral types. signed type unsigned type description intmax_t uintmax_t Integer type with the maximum width supported. int8_t uint8_t Integer type with a width of exactly 8, 16, 32, or 64 bits. For signed types, negative values are represented using 2's complement. No padding bits. Optional: These typedefs are not defined if no types with such characteristics exist.* int16_t uint16_t int32_t uint32_t int64_t uint64_t int_least8_t uint_least8_t Integer type with a minimum of 8, 16, 32, or 64 bits. No other integer type exists with lesser size and at least the specified width. int_least16_t uint_least16_t int_least32_t uint_least32_t int_least64_t uint_least64_t int_fast8_t uint_fast8_t Integer type with a minimum of 8, 16, 32, or 64 bits. At least as fast as any other integer type with at least the specified width. int_fast16_t uint_fast16_t int_fast32_t uint_fast32_t int_fast64_t uint_fast64_t intptr_t uintptr_t Integer type capable of holding a value converted from a void pointer and then be converted back to that type with a value that compares equal to the original pointer. Optional: These typedefs may not be defined in some library implementations.* Some of these typedefs may denote the same types. Therefore, function overloads should not rely on these being different. * Notice that some types are optional (and thus, with no portability guarantees). A particular library implementation may also define additional types with other widths supported by its system. In any case, if either the signed or the unsigned version is defined, both the signed and unsigned versions are defined.
在上个项目的网络编程,遇到了很多typedef定义的数据类型,现进行记录,主要参考了一下链接: https://blog.csdn.net/EUSIA/article/details/76401235 https://www.cnblogs.com/curo0119/p/8891906.html https://www.jb51.net/article/109690...
最近在看代码的时候,发现好多师兄写的代码喜欢用下面一些数据类型:typedef uint8_t u8_t; typedef int8_t i8_t; typedef uint16_t u16_t; typedef int16_t i16_t; typedef uint32_t u32_t; typedef int32_t i32_t; typedef u
这些都是C语言的整数数据类型,它们是由C标准库的stdint.h头文件定义的。这些类型具有固定的位宽,可以确保在不同平台上具有相同的大小。 - uint8_t表示无符号8位整数,范围是0到255。 - uint16_t表示无符号16位整数,范围是0到65535。 - int16_t表示带符号的16位整数,范围是-32768到32767。 - uint32_t表示无符号32位整数,范围是0到4294967295。 这些类型的使用可以确保代码在不同平台上具有可移植性,并且对于需要确定位宽的应用程序非常有用。
C语言中的int8_t,uint8_t, int16_t,uint16_t, int32_t,uint32_t, int64_t,uint64_t和int数组,char数组以及sizeof()的理解
C语言中的int8_t,uint8_t, int16_t,uint16_t, int32_t,uint32_t, int64_t,uint64_t和int数组,char数组以及sizeof()的理解 Braveh丶: 有帮助bro! IAR在线调试printf输出log Eugene_Hung: 先在printf那里设置断点 IAR在线调试printf输出log lhdaniu: 你好,我的还是不输出,还需要配置那里吗