0

在这里,我在将值分配给结构的成员时遇到了问题,我使用该缓冲区通过 UART 接收一些数据。

我使用的缓冲区是一个 char 数组/缓冲区,称为 buff,大小为 35 字节,是一个全局缓冲区。缓冲区中的第 8 个字节称为 left_low,它是一个 4 字节的值。现在,据我了解C,运算符'*'是'Value At'运算符。为了从缓冲区的第 8 个字节开始复制 4 个字节,以下是我编写的代码。这个对吗?或者我需要在这里使用 memcpy() 吗?我不知道 memcpy() 在这种情况下如何工作。请帮忙!

char buff[35];
int write_function()  
{  
  struct calibration_data dcs2_config;  
  dcs2_config.left_low = *(buff+1*8); //will this work?  
  //or should this be done?  memcpy(&dcs2_config.left_low,buff+1*8,4);  

  return 0;  
}  
4

3 回答 3

1

不,这行不通。

的类型buff+1*8char*,所以的类型*(buff+1*8)char。因此,dcs2_config.left_low = *(buff+1*8);会将 at 的单字符值buff+1*8写入 4 字符left_low(进行整数提升)。

您最好的选择可能不是memcpy任何一个,而是投射指针。假设left_lowint

dcs2_config.left_low = *((int *)(buff + 1*8));
于 2013-06-05T11:04:19.353 回答
0

您的代码只会复制一个字符(一个字节),因为 buff 是一个字符数组。memcpy 将按预期工作。

我不知道你为什么写 1*8,什么时候可以写 8,或者 sizeof(char)*8 (但请记住 sizeof(char) 始终为 1)。

于 2013-06-05T11:04:41.087 回答
0

您应该使用 memcpy。您尝试复制的方式只会选择一个字节(字符长度)。

于 2013-06-05T11:07:04.740 回答