sos博 发表于 2017-6-19 14:48:31

uint32_t怎么转为uint8_t?

uint32_t怎么转为uint8_t?

芯片:stm32f412zg
目的:用随机数生成器,得到随机数,然后发送到串口。

随机数生成函数是
HAL_StatusTypeDef    HAL_RNG_GenerateRandomNumber(RNG_HandleTypeDef *hrng, uint32_t *random32bit)


串口发送函数是
HAL_StatusTypeDef   HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)


问题:请问怎么把生成的uint32_t *转化为uint8_t *??
谢谢。


wambob 发表于 2017-6-19 16:41:57

把uint32_t 分成4个uint8_t

MrJiu 发表于 2017-6-19 16:52:33

还需要保留原来的数据啊,那就自己写一个函数,转换呗!!!!

黑皮男 发表于 2017-6-19 21:01:46

直接强制转换,转换后数据长度为四个字节,注意是小端模式

toofree 发表于 2017-6-19 23:35:04

指针随便转,只要记住指针就是地址,STM32中地址都是32位的,并且Flash和RAM统一寻址,没有区别。
uint32_t * 指针加一的话,地址增4; uint8_t *指针加一的话,地址增1,仅此而已。

toofree 发表于 2017-6-19 23:51:19

本帖最后由 toofree 于 2017-6-19 23:57 编辑

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main()
{
    uint32_t a32=0x01234567;
    uint32_t * p32;
    uint8_t * p8;
    uint8_t a8;

    p32 = &a32;
    p8 = (uint8_t *)p32;

    printf("0x%08X\n",a32);
    printf("\n");

    printf("0x%02X\n",*((uint8_t *)p32+0));
    printf("0x%02X\n",*((uint8_t *)p32+1));
    printf("0x%02X\n",*((uint8_t *)p32+2));
    printf("0x%02X\n",*((uint8_t *)p32+3));
    printf("\n");

    printf("0x%02X\n",*(p8+0));
    printf("0x%02X\n",*(p8+1));
    printf("0x%02X\n",*(p8+2));
    printf("0x%02X\n",*(p8+3));
    printf("\n");

    a8 = *(p8+0);
    a8 = *(p8+1);
    a8 = *(p8+2);
    a8 = *(p8+3);
    printf("0x%02X\n",a8);
    printf("0x%02X\n",a8);
    printf("0x%02X\n",a8);
    printf("0x%02X\n",a8);
    printf("\n");

    return 0;
}

发表于 2017-6-20 08:33:59

printf的话可以直接用输出32位的,库函数输出的时候,入口些微HAL_UART_Transmit(uart1,&a,4,1000);
页: [1]
查看完整版本: uint32_t怎么转为uint8_t?