下面代码中的 ByteArray 相关的代码参考这篇文章
struct_test.h
#ifndef struct_tset_h
#define struct_tset_h
#include <stdio.h>
#include <stdlib.h>
#include "data_util.h"
struct point {
int x;
int y;
};
void run_struct_test(void);
#endif
struct_test.c
#include "struct_tset.h"
void run_struct_test(void) {
//初始化结构体的几种方式
struct point p1 = { 1, 2 };//顺序比较重要
struct point p2 = { .y = 4, .x = 2 };//使用成员名称,可以与声明的顺序不一样
struct point *p3 = &((struct point) { 3, 6 });//字面量,也可以作为函数参数进行传递
struct point *p4 = malloc(sizeof(struct point));//动态分配内存,记得用free()释放
p4->x = 4;
p4->y = 8;
//动态分配内存,但是包含伸缩型数组成员,即创建结构体之前数组长度是不确定的
//在初始化的时候动态分配额外的存储空间,这种情况也只能使用 malloc() 进行初始化
int data_length = 10;
ByteArray *arr = malloc(sizeof(ByteArray) + data_length * sizeof(uint8_t));
arr->length = data_length;
for (int i = 0; i < data_length; i++) {
arr->data[i] = (uint8_t)arc4random_uniform(256);
}
const char* hex_str = data_to_hex(arr);
printf("point1=[%d, %d]\n", p1.x, p1.y);
printf("point2=[%d, %d]\n", p2.x, p2.y);
printf("point3=[%d, %d]\n", p3->x, p3->y);
printf("point4=[%d, %d]\n", p4->x, p4->y);
printf("%s\n", hex_str);
free(p4);
free((void*)hex_str);
free(arr);
}