как записать значение символа из структуры в последовательный интерфейс и преобразовать в целочисленное значение?

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'); 

    и т. д.

    Как отмечали другие, бывают ситуации, когда вам лучше использовать строки с нулевым символом. Если, однако, у вас была определенная причина сделать это, то, полагаю, вы могли ;

     #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 

    Выход: (Не забудьте, что в каждой строке напечатана «после» последней запятой)

     +,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 следующим образом:

    так должно быть

     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 чтобы вы могли использовать макрос, чтобы упростить его:

     #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; 

    BTW: вы не можете ставить 'EA' , 'EB' , 'EC' как 1 персонаж, который вы должны разделить на: 'E','A' , 'E','B' , 'E','C' и поэтому вам нужно обновить размеры массива символов в определении структуры

    Это не синтаксис 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() .