#include <stdint.h>
#include <string.h>
/**
* 将uint8_t[16]的大端数据转换为uint32_t[4]的小端数据
* @param input 输入的16字节大端格式数据
* @param output 输出的4元素小端格式uint32数组
* @note 输入数组需至少16字节,输出数组需至少4个元素
*/
void uint8_16_big_to_uint32_4_little(const uint8_t input[16], uint32_t output[4]) {
// 检查输入输出指针有效性
if (input == NULL || output == NULL) {
return;
}
// 临时存储大端格式的32位数据
uint32_t big_endian;
for (int i = 0; i < 4; i++) {
// 从uint8数组中按大端方式组合成32位数据
// 每个uint32由4个连续的uint8组成
big_endian = ((uint32_t)input[i*4] << 24) |
((uint32_t)input[i*4 + 1] << 16) |
((uint32_t)input[i*4 + 2] << 8) |
(uint32_t)input[i*4 + 3];
// 将大端32位数据转换为小端格式
output[i] = ((big_endian & 0x000000FF) << 24) |
((big_endian & 0x0000FF00) << 8) |
((big_endian & 0x00FF0000) >> 8) |
((big_endian & 0xFF000000) >> 24);
}
}
// 使用示例
/*
#include <stdio.h>
int main() {
// 16字节的大端数据
uint8_t input[16] = {
0x11, 0x22, 0x33, 0x44, // 应组合为0x11223344,转换后为0x44332211
0x55, 0x66, 0x77, 0x88, // 应组合为0x55667788,转换后为0x88776655
0x99, 0xAA, 0xBB, 0xCC, // 应组合为0x99AABBCC,转换后为0xCCBBAA99
0xDD, 0xEE, 0xFF, 0x00 // 应组合为0xDDEEFF00,转换后为0x00FFEEDD
};
uint32_t output[4];
uint8_16_big_to_uint32_4_little(input, output);
// 打印转换结果
for (int i = 0; i < 4; i++) {
printf("output[%d] = 0x%08X\n", i, output[i]);
}
return 0;
}
*/
uint8[16]的大端数据转换为uint32[4]的小端数据的函数
最新推荐文章于 2026-06-22 19:04:06 发布
3612

被折叠的 条评论
为什么被折叠?



