【发布时间】:2021-03-04 14:08:19
【问题描述】:
我正在尝试从 SPI 传输填充的 uint8_t 类型的数组中提取一些浮点变量。 但是到目前为止我无法实现正确的提取,所以我编写了一个小程序,以便了解我做错了什么。
首先,我只是用一些浮点数填充了缓冲区,并想检查它是否正确完成。我注意到当使用 memcpy 将浮点变量复制到缓冲区并在之后打印缓冲区内容时,它仍然包含全零。但是,当将 float 变量直接分配给每个缓冲区位置指向的空间(当前在 memcpy 函数下方注释掉的行)时,缓冲区的初始化会按照我想要的方式工作。
谁能指出我的错误。
#include <stdio.h>
#include <string.h>
#define MAX_MSG_LEN 64
static uint8_t buffer_rx[MAX_MSG_LEN];
int main(){
for(int i=0; i<MAX_MSG_LEN/sizeof(float); i++){
float myFloat = (float)i;
printf("myFloat = %f\n", myFloat);
printf("buffer_rx+sizeof(float)*%d = %p\n", i, (void*)(&buffer_rx[sizeof(float)*i]));
memcpy(&buffer_rx[sizeof(float)*i], &myFloat, sizeof(float));
//buffer_rx[sizeof(float)*i] = myFloat;
printf("buffer_rx[%d] = %f\n", i, (float)(buffer_rx[sizeof(float)*i]));
}
}
【问题讨论】:
标签: c pointers type-conversion memcpy