stdlib.h#
stdlib.h提供一系列帮助函数
- Author
Shihong Wang (jack4shihong@gmail.com)
- Version
0.1
- Date
2023-04-09
- Copyright
Copyright Shihong Wang (c) 2023 with GNU Public License V3.0
Warning
为了避免编译时编译器使用系统的stdlib.h库, 编译时需要为GCC指定-nostdinc选项, 详见根目录下的Makefile
Defines
-
offset(struct_type, member_name)#
offset宏用于获得结构体struct_type中名为member_name成员的偏移量(以字节计算)举例:
struct person_t { uint8_t age; uint32_t id; char name[10]; }; offset(person_t, age); # return 0 offset(person_t, id); # return 1 offset(person_t, name); # return 5- Parameters:
struct_type – 结构体名
member_name – 结构体中的成员名
-
member2struct(struct_type, member_name, elem_ptr)#
member2struct宏用于将指向结构体struct_type中的名为member_name的成员的指针转为指向struct_type的指针举例:
struct person_t { uint8_t age; uint32_t id; char name[10]; }; person_t jack = {22, 2196113760, "Shihong Wang"}; uint32_t *id_ptr = &jack.id; # 将指向成员的指针转换为指向结构体的指针 person_t *person_ptr = member2struct(person_t, id, id_ptr); &jack == person_ptr ? true : false; # return true- Parameters:
struct_type – 结构体名
member_name – 结构体中的成员名
elem_ptr – 指向结构体中
member_name成员的指针
- Returns:
struct_type* 指向成员所在的结构体的指针
Functions
-
void itoa(uint64_t integer, char **buf_ptr_addr, uint8_t base)#
itoa(integer to ascii) 用于将uint64_t数字转换为char*数字, 并将其存入*buf_ptr_addr指向的内存中Note
因为是使用递归完成的转换, 因此多次递归需要共享字符数组, 因此需要字符数组的二级指针
- Parameters:
integer – 需要转为字符串形式的整数
buf_ptr_addr – 指向接受输出的字符串的指针, 即字符数组名的地址
base – 转换进制, 可以任意指定. 例如:
base = 2: 将integer转换为二进制形式的字符串数字, 例如6 = "110"base = 8: 将integer转换为二进制形式的字符串数字, 例如23 = "27"base = 16: 将integer转换为二进制形式的字符串数字, 例如47 = "2F"