MST

星途 面试题库

面试题:C语言联合体在复杂协议嵌套解析中的应用

考虑一个复杂的通信协议,其中有一个外层头部包含一个32位的总长度字段(total length)和一个内层结构体指针。内层结构体是一个联合体,可能表示不同类型的数据,如16位整数(int16_t)或者32位浮点数(float)。请设计C语言的数据结构来解析这个协议,并编写函数实现对内层不同类型数据的正确解析与处理。
42.3万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <stdint.h>

// 定义内层联合体
union InnerData {
    int16_t int_value;
    float float_value;
};

// 定义外层结构体
typedef struct OuterHeader {
    uint32_t total_length;
    union InnerData *inner_data;
} OuterHeader;

// 解析函数,处理不同类型数据
void processInnerData(OuterHeader *header) {
    if (header->inner_data == NULL) {
        return;
    }
    // 假设协议中有一个标志位来区分数据类型,这里简单示例
    // 比如,通过判断total_length的奇偶性
    if (header->total_length % 2 == 0) {
        printf("解析到的16位整数: %d\n", header->inner_data->int_value);
    } else {
        printf("解析到的32位浮点数: %f\n", header->inner_data->float_value);
    }
}

你可以使用以下方式调用:

int main() {
    // 模拟数据填充
    union InnerData inner;
    inner.int_value = 10;
    OuterHeader outer;
    outer.total_length = 100;
    outer.inner_data = &inner;

    processInnerData(&outer);
    return 0;
}