鉴于
typedef struct {
uint32 dataAddress;
} rsp;
数据数组,例如。 {1,2,3 ...... 10}
uint8 *msg = NULL;
我们将消息数组提供给数据地址
rsp->dataAddress = (uint32) msg;
我们如何打印?例如:
for (k=0; k < 10; k++) // message fixed at length 10
printf("Resultant message = %x", (uint8) rsp->dataAddress[k]);
答案 0 :(得分:2)
如果要将dataAddress
解释为指向uint8
数组的指针,则需要强制转换。基本上,演员阵容与您在分配dataAddress
时所做的相反。您已制作的演员阵容是uint8*
到uint32
。因此反向投射看起来像这样:
(uint8*)rsp->dataAddress
要访问您编写的数组的元素:
((uint8*)rsp->dataAddress)[k]
我很想知道您为何选择将dataAddress
声明为uint32
类型。在我看来,将它声明为uint8*
并因此避免所有演员阵容更为明智。
答案 1 :(得分:0)
我设法让一些东西运转起来。 谢谢大家。你很棒。
#include <stdint.h>
typedef struct {
uint32_t dataAddress;
} rsp;
#define LEN 10
void main() {
int i = 0;
uint8_t *msg = NULL;
msg = malloc(sizeof(uint8_t)*LEN);
printf("Init: \n");
for (i=0; i<LEN; i++) {
msg[i] = i;
printf("%d ", msg[i]);
}
printf("\n");
printf("Address: 0x%x \n", msg);
printf("Address: 0x%x \n", (uint32_t) msg);
rsp *rsp_ptr;
(rsp_ptr->dataAddress) = (uint32_t) msg;
for (i=0; i < LEN; i++) // message fixed at length 10
printf(" %x", ((uint8_t*) rsp_ptr->dataAddress)[i]);
printf("\n");
}