如何将字符值从结构写入串口并转换为整数值?

struct MemoryTag1; typedef struct MemoryTag1{ char a[8]= {'+','0','2','6','.','5','EA','\r'}; // setpoint temperature value char b[8]= {'-','0','2','4','.','5','EB','\r'}; char c[6]= {'+','0','2','0','EC','\r'}; }Memory1; 

//这是一个消息结构,我想通过串行接口(RS232)传输,然后转换为整数值。 请指导我。

你的语法有点偏 – 尝试这个:

 // declare Memory1 struct type to hold data typedef struct MemoryTag1 { char a[9]; // setpoint temperature value char b[9]; char c[7]; } Memory1; // allocate and initialise a Memory1 struct Memory1 m = { {'+','0','2','6','.','5','E','A','\r'}, {'-','0','2','4','.','5','E','B','\r'}, {'+','0','2','0','E','C','\r'} }; 

说实话,我更喜欢更多的信息。 但这并不重要。 它只影响输出方法。 例如,如果您在arduino上运行它,则可以像以下一样轻松输出到串行端口:

 Serial.begin(9600); Serial.write('a'); 

等等

正如其他人所提到的,在某些情况下,您最好使用以null结尾的字符串。 但是,如果你有特殊的理由这样做,那么我想你可以 ;

 #include  typedef struct memoryTag1_t { char a[9]; // setpoint temperature value char b[9]; char c[7]; } *pMemoryTag1_t; typedef struct memoryTag2_t { char a[10]; // setpoint temperature value char b[10]; char c[8]; } *pMemoryTag2_t; void displayField1(char *field, int len) { for (int i=0; i 

输出:(不要忘记在每行的最后一个逗号之后打印'\ r')

 +,0,2,6,.,5,E,A, -,0,2,4,.,5,E,B, +,0,2,0,E,C, +,0,2,6,.,5,E,A, -,0,2,4,.,5,E,B, +,0,2,0,E,C, 

你不能用这种方式在C中声明struct:

它应该是

 typedef struct MemoryTag1{ char a[9]; char b[9]; char c[7]; }Memory1; 

您可以在此结构的对象的声明中设置值:

 Memory1 test = { {'+','0','2','6','.','5','E','A','\r'}, {'-','0','2','4','.','5','E','B','\r'}, {'+','0','2','0','E','C','\r'} }; 

如果在每次启动Memory1对象时使用此块,则可以使用宏来Memory1它:

 #define INIT_MEMORYTAG1 {\ {'+','0','2','6','.','5','E','A','\r'},\ {'-','0','2','4','.','5','E','B','\r'},\ {'+','0','2','0','EC','\r'}\ } 

然后在你的Memory1对象的声明中:

 Memory1 test = INIT_MEMORYTAG1; 

顺便说一句:你不能把'EA''EB''EC'放在一个1 charachter你必须把它们分开: 'E','A''E','B''E','C'所以你必须在结构定义中更新你的char数组大小

那真的不是C语法。

你不能在类型的声明中使用初始化器,它没有任何意义。

你需要像这样做,来构建消息:

  typedef struct { char a[10]; char b[10]; char c[8]; } Memory1; int main(void) { Memory1 m1; strcpy(m1.a, "+026.5EA\r"); strcpy(m1.b, "-024.5EB\r"); strcpy(m1.c, "+020EC\r"); return 0; } 

请注意,上面将在消息的字段中构建正确的C字符串,即将有0个字符作为终结符。 尺寸太小,所以我改变了。

如果你需要通过一些不允许它们的格式发送它,那么忽略终结符字符是微不足道的; 分别发送每个字段。

例如,可以使用sscanf()将其中一个字段转换回整数。