首页 > 解决方案 > 是否可以从预处理器转换为数组?

问题描述

我正在尝试将预处理器转换为数组,但我不确定是否有可能,

例如,我定义了:数字 0x44332211

下面的代码:

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

#define number 0x44332211

int main()
{

   uint8_t array[4] = {(uint8_t)number, (uint8_t)number << 8,(uint8_t)(number <<16 ),(uint8_t)(number <<24)};

    printf("array[%x] \n\r",array[0]);  // 0x44
    printf("array[%x] \n\r",array[1]);  // 0x33
    printf("array[%x] \n\r",array[2]);  // 0x22
    printf("array[%x] \n\r",array[3]);  // 0x11

    return 0;
}

我想将它转换为两个 uint8_t array[4] where array[0] = 0x44, array[1] = 0x33, array[2] = 0x22, array[3] = 0x11

可能吗?

my output:
array[11]                                                                                                                                      
array[0]                                                                                                                                       
array[0]                                                                                                                                       
array[0]

标签: carrayscastingpreprocessor

解决方案


是的,您正在将 anint转换为uint8_t. 唯一的问题是,当您进行转换时,结果将不适合您要转换的类型,并且信息将丢失。

您的uint8_t演员表只占用了最低有效字节。这就是为什么你在第一种情况下得到 11 而在其他情况下得到 0 ......因为你向左移动会在最右边的位置留下 0。


推荐阅读