uint8[16]的大端数据转换为uint32[4]的小端数据的函数

#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;
}
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZeroOne电平浪客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值