Как получить строку?

Тема в разделе "Arduino & Shields", создана пользователем Никита Мещеряков, 16 мар 2019.

Метки:
  1. Здравствуйте.Вообщем в чем проблема.Я отправляю с сервера запрос через форму (абсолютно рандомный текст. И мне надо его получить.Но получаю я только цифры.
    Код (C++):
    #include <TextFinder.h>
    #include <SPI.h>
    #include <Ethernet.h>
    byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Мак адрес
    IPAddress ip(192, 168, 0, 113); // IP адрес (изменить в title)
    EthernetServer server(80);
    char ge[128];
    void setup()
    {
    //Старт
    Serial.begin(9600);
    Ethernet.begin(mac, ip);
    Serial.print("server is at ");
      Serial.println(Ethernet.localIP());
    server.begin();
    Serial.println("device is run");
    }
    void loop(){
    EthernetClient client = server.available();
    if (client)  {
      TextFinder response(client);
      while (client.connected())
      {
       if (client.available()) {
       if(response.find("GET /")) {
       if (response.find("?login=")) {
       ge = response.getValue();
       Serial.println(ge);
       }
       }
       // Выводим HTML страницу
       client.println("HTTP/1.1 200 OK");
       client.println("Content-Type: text/html");
       client.println();
       client.println();
       client.println("<!DOCTYPE html>");
       client.println("<html lang=\"ru\">");
       client.println("<head>");
       client.println("<meta charset=\"UTF-8\">");
       client.println("<title>Home</title>");
       client.println("</head>");
       client.println("<body>");
       client.println("<h1>Server</h1>");
       client.println("<p>Нажата ссылка: ");
       client.println(ge);
       client.println("</p>");
       client.println("<form id=\"auth\" action="" method=\"get\"></form>");
       client.println("<p><input name=\"login\" form=\"auth\"></p>");
       client.println("<p><input type=\"submit\" form=\"auth\"></p>" );
       client.println("<p><a href=\"?p=1\">Link 1</a><br><a href=\"?p=2\">Link 2</a></p>");
       client.println("</body>");
       client.println("</html>");
       client.stop();   }
      }
    }
    }
    Если (ge) сделать числом, то все хорошо работает, но мне надо получать символы, а затем я преобразую в строку.Но выводит ошибку (
    exit status 1
    incompatible types in assignment of 'long int' to 'char [128]'). Вот так, как быть? Спасибо.
     
  2. parovoZZ

    parovoZZ Гуру

    Вся информация в лоне процессоров - это и есть цифры. Причем только две - 0 и 1. Всё остальное - это человеческие домыслы.
     
  3. Daniil

    Daniil Гуру

    Каждый символ имеет свой код, смотрите ascii-таблицу.
     
  4. zuko

    zuko Нерд

    Это не рандомный текст, отнюдь. Тут две проблемы, и первая из них - русские буквы, если они есть. Буржуйские программы их не печатают в принципе. Вторая проблема - кодировка. В скетче я вижу UTF-8, а это восьмибитный юникод, использующий для передачи символа от 1 до 4 байт. Тут и человек свихнется, не то что махонький АТмега. Он любит и понимает 7-битный ASCII.

    Попробуйте скопировать в Ворд адрес этой странички, и тоже увидите вместо букв черт-те-что.
     
  5. 0xed1c24, 0xed1c24, 0xed1c24, 0xed1c24, что такое будет отправляться
     
  6. parovoZZ

    parovoZZ Гуру

    Чо??? Атмега любит ascii???? Это в каком даташите описано???
     
  7. zuko

    zuko Нерд

    Ну, если не поддерживаются русские буквы, значит простой семибитный код. На то он и "америкэн", чтобы не знать русского. Есть другие варианты? С радостью восприму, вдруг пригодится.
     
  8. parovoZZ

    parovoZZ Гуру

    кем?
     
  9. zuko

    zuko Нерд

    Темными силами. Всяческой Антантой и другими авторами стандартов.
    Всегда доставало, что албанский в списках наличествует. а русский нет.