Одномерный массив в n -мерный массив с некоторыми условиями.
- Войдите на сайт для отправки комментариев
Пнд, 24/02/2020 - 16:28
Добрый день. Помогите с кодом. Задача расписана в самом коде.
byte exByte[5][8] = { {0xA1, 0x00, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x20}, {0xA2, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65}, {0xA3, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}, {0xA4, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20}, {0xA5, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20} }; String input_string = ""; char incomingByte; // from serial void setup() { Serial.begin(115200); /*задача: добить входящую строку пробелами. В начало добавить три пробела, в конец добить до длинны 21 знак. В итоге получим строку из 21 знака. Эту строку нужно преобразовать в byte, разделить на три блока по 7 байт и заменить содержимое exByte начиная с exByte[2] не трогая первый байт массива. Например получили строку: some data добили пробелами, загнали в промежуточный массив: {0x20,0x20,0x20,0x73,0x6F,0x6D,0x65,0x20,0x64,0x61,0x74,0x61,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20} разделили на три части и разложили в нужные места. В итоге exByte должен стать таким:
{0xA1, 0x00, 0x69, 0x6E, 0x70, 0x75, 0x74, 0x20}, {0xA2, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65}, {0xA3, 0x20, 0x20, 0x20, 0x73, 0x6F, 0x6D, 0x65}, {0xA4, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x20}, {0xA5, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20} */ } void loop() { ///////////////////////////////////////////////////////////////// //получаем из компорта данные while (Serial.available() > 0) { char c = Serial.read(); byte b = c; if (c == '\n') { // парсим myParcer(input_string); input_string = ""; } else { if (b != 0) input_string += c; } } ////////////////////////////////////////////////////////////////// } // парсер и вывод в сериал ///////////////// void myParcer(String input_str) { byte buf[22]; int pos; String newStr; Serial.print("input string = "); Serial.println(input_str); if (input_str.substring(0, 3) == "TT+") { pos = input_string.lastIndexOf('\r'); newStr = input_str.substring(3, pos); //три пробела с начала newStr = " " + newStr; //наверняка в конце for (int i = 0; i < 21; i++ ) { newStr = newStr + " "; } // в массив байт newStr.getBytes(buf, sizeof(buf)); ////////////////////////////////////////////////////////// // это не нравится for (int i = 0; i < 7; i++) { //первые 7 в массив exByte[2][i + 1] = buf[i]; Serial.print(exByte[2][i + 1], HEX); Serial.print(" "); } Serial.println(""); for (int i = 0; i < 7; i++) { //вторые 7 в массив exByte[3][i + 1] = buf[i + 7]; Serial.print(exByte[3][i + 1], HEX); Serial.print(" "); } Serial.println(""); for (int i = 0; i < 7; i++) { // третьи 7 в массив exByte[4][i + 1] = buf[i + 14]; Serial.print(exByte[4][i + 1], HEX); Serial.print(" "); } Serial.println(""); ///////////////////////////////////////////////////////////// //полученный массив в сериал for (int b = 0; b < 5; b++) { for (int i = 0; i < 8; i++) { Serial.print(exByte[b][i], HEX); Serial.print(" "); } Serial.println(""); } } }
Как сделать кусок
for (int i = 0; i < 7; i++) { //первые 7 в массив exByte[2][i + 1] = buf[i]; Serial.print(exByte[2][i + 1], HEX); Serial.print(" "); } Serial.println(""); for (int i = 0; i < 7; i++) { //вторые 7 в массив exByte[3][i + 1] = buf[i + 7]; Serial.print(exByte[3][i + 1], HEX); Serial.print(" "); } Serial.println(""); for (int i = 0; i < 7; i++) { // третьи 7 в массив exByte[4][i + 1] = buf[i + 14]; Serial.print(exByte[4][i + 1], HEX); Serial.print(" "); } Serial.println("");
универсальным? Спасибо.
Положить цикл копирования внутрь другого цикла, где переменная k будет инкрементироваться на N. Тогда точно универсальным станет.