我正在尝试编写一个包含固定 14 个起始字符并以不同内容结尾的字符串(完全是 char 数组)。可变位包含 2 个浮点数和 1 个 32 位整数,它们将被单独视为数组中的 4 个 1 字节字符,以逗号分隔。它可以通过以下代码来说明,由于某些明显的原因(*char 不能分配给 *float),它无法编译。那么,我能做些什么来绕过它呢?
char *const comStr = "AT+UCAST:0000=0760,0020,0001\r"; // command string
float *pressure;
float *temperature;
uint32_t *timeStamp;
pressure = comStr + 14; // pressure in the address following the '=' in command string
temperature = comStr + 18; // temperature in the address following the 1st ',' in command string
timeStamp = comStr + 22; // time stamp in the address following the 2nd ',' in command string
我对 C 语言中的 struct 和 union 之类的东西有一个不清楚的记忆,它严格保留了在“结构”中定义变量的内存分配顺序。也许是这样的:
typedef struct
{
char[14] command;
float *pressure;
char comma1;
float *temperature;
char comma2;
uint32_t *time_stamp;
char CR;
}comStr;
这种结构是否保证 comStr-> command[15] 给了我*压力的第一个/最后一个字节(取决于字节序)?或者有没有其他特殊的结构可以瞒着我?
(注意:comStr-> command[15] 不会在以后的代码中进行评估,因此超出索引边界在这里不是问题。这里唯一重要的是内存是否连续分配以便硬件获取持续从内存地址开始的 29 个字节(comStr-> 命令)给了我我想要的字符串)。
ps 在写这篇文章的时候,我想出了一个主意。我可以只使用 memcpy() 吗?) memcpy 有 void* 类型的参数,希望它能工作!我现在要试试!无论如何,所有冰雹stackOverflow!
编辑:我应该让自己更清楚,对于任何误导和误解,我深表歉意!我要构造的字符数组是通过UART逐字节发送的。为此,如果将字符数组的起始存储器地址和长度提供给 DMA 系统,则将使用 DMA 系统将数组自动逐字节传输到发送缓冲区。所以字符数组必须连续存储在内存中。我希望这能让问题更清楚。