#include <stdio.h>
#include <string.h>
// 定义联合体
union Data {
short intValue;
char charValue[2];
};
// 解析函数
void parseData(union Data *data, int flag, const char *packet) {
if (flag) {
// 标志位为真,解析为16位整数
memcpy(&data->intValue, packet, sizeof(short));
} else {
// 标志位为假,解析为两个8位字符
data->charValue[0] = packet[0];
data->charValue[1] = packet[1];
}
}
// 打印函数
void printData(union Data *data, int flag) {
if (flag) {
printf("解析为16位整数: %d\n", data->intValue);
} else {
printf("解析为两个8位字符: %c %c\n", data->charValue[0], data->charValue[1]);
}
}
确保内存使用高效性和数据访问正确性的方法:
- 内存使用高效性:
- 联合体的设计使得不同数据类型共享同一块内存空间,避免了额外的内存开销。
- 这里
union Data
的大小取决于其最大成员,即short
类型,大小为2字节,不会因为同时支持两种数据类型而额外增加内存。
- 数据访问正确性:
- 使用标志位
flag
来明确当前联合体中的数据是何种类型,避免错误的访问。
- 在
parseData
函数中,根据标志位选择正确的解析方式,保证数据被正确存储到联合体中。
- 在
printData
函数中,同样根据标志位选择正确的打印方式,确保数据的正确展示。