面试题答案
一键面试#include <stdio.h>
// 定义结构体,使用位域表示状态信息
typedef struct {
unsigned int deviceID : 4;
unsigned int operationType : 2;
unsigned int successFlag : 1;
unsigned int reserved : 1;
} StatusInfo;
// 打包函数,将结构体数据打包成一个字节
unsigned char packStatusInfo(StatusInfo info) {
unsigned char result = 0;
result |= info.deviceID;
result |= (info.operationType << 4);
result |= (info.successFlag << 6);
result |= (info.reserved << 7);
return result;
}
// 解析函数,将接收到的字节解析回结构体
StatusInfo unpackStatusInfo(unsigned char byte) {
StatusInfo info;
info.deviceID = byte & 0x0F;
info.operationType = (byte >> 4) & 0x03;
info.successFlag = (byte >> 6) & 0x01;
info.reserved = (byte >> 7) & 0x01;
return info;
}
你可以使用以下方式测试这些函数:
int main() {
StatusInfo originalInfo = {3, 1, 1, 0}; // 示例数据
unsigned char packedByte = packStatusInfo(originalInfo);
StatusInfo unpackedInfo = unpackStatusInfo(packedByte);
printf("Original deviceID: %d\n", originalInfo.deviceID);
printf("Original operationType: %d\n", originalInfo.operationType);
printf("Original successFlag: %d\n", originalInfo.successFlag);
printf("Original reserved: %d\n", originalInfo.reserved);
printf("Packed byte: 0x%02X\n", packedByte);
printf("Unpacked deviceID: %d\n", unpackedInfo.deviceID);
printf("Unpacked operationType: %d\n", unpackedInfo.operationType);
printf("Unpacked successFlag: %d\n", unpackedInfo.successFlag);
printf("Unpacked reserved: %d\n", unpackedInfo.reserved);
return 0;
}