Класс IPAddress предоставляет обёртку для IP-адресов.
Если библиотека Ethernet подключена, то для использования IPAddress ничего больше подключать не нужно. В противном случае подключайте так:
#include "IPAddress.h"
Конструктор IPAddress() существует в нескольких формах:
IPAddress()
IPAddress(uint8\_t first\_octet, uint8\_t second\_octet, uint8\_t third\_octet, uint8\_t fourth\_octet)
IPAddress(uint32_t address)
IPAddress(const uint8_t *address)
Рассмотрим каждый поподробней.
Конструктор IPAddress() инициализирует IP-адрес нулевым значением (адрес 0.0.0.0).
Конструктор IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet) инициализирует IP-адрес адресом вида first_octet.second_octet.third_octet.fourth_octet. Все компоненты адреса -- целые беззнаковые числа размером в байт.
Конструктор IPAddress(uint32_t address) получает в качестве адреса 32-разрядное беззнаковое число, которое равносильно привычному четырёх байтовому.
Конструктор IPAddress(const uint8_t *address) получает на вход массив целых беззнаковых чисел. Этот массив должен иметь четыре инициализированных элемента. Судя по текущей версии кода библиотеки, если передать массив с большим числом элементов, то конструтор молча скопирует первые четыре и проигнорирует все остальные. Если передать меньше, то дальнейшее поведение будет ошибочным и непредсказуемым.
Метод printTo() реализует интерфейс Printable и объявлен следующим образом:
virtual size_t printTo(Print& p) const;
В основном этот метод используется библиотечными методами print() и println() для получения текстового представления объекта (класс Print).
Оператор uint32_t() объявлен следующим образом:
operator uint32_t() const { return _address.dword; };
Оператор uint32_t() служит преобразованию адреса из одной формы представления в другую.
Оператор сравнения (==) объявлен в двух формах:
bool operator==(const IPAddress& addr) const { return _address.dword == addr._address.dword; };
bool operator==(const uint8_t* addr) const;
Оператор позволяет сравнивать два объекта IPAddress или объект IPAdrress и IP-адрес в форме массива из четырёх чисел.
Оператор присваивания (=) представлен в двух формах:
IPAddress& operator=(const uint8_t *address);
IPAddress& operator=(uint32_t address);
Благодаря этим двум операторам, мы можем задавать IP-адрес в форме массива из четырёх чисел или в форме четырёх байтового числа.
Оператор индексации позволяет обращаться к каждой из четырёх компонент IP-адреса по отдельности.
uint8_t operator[](int index) const { return _address.bytes[index]; };
uint8_t& operator[](int index) { return _address.bytes[index]; };
Небольшой пример кода:
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress dnServer(192, 168, 0, 1);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress ip(192, 168, 0, 2);
void setup() {
Serial.begin(9600);
Ethernet.begin(mac, ip, dnServer, gateway, subnet);
Serial.print("IP = ");
Serial.println(ip);
}
void loop() {
}
Внутри IPAddress адрес хранится в виде
union {
uint8_t bytes[4];
uint32_t dword;
} _address;
Таким образом, обе формы представления адреса эквивалентны и легко конвертируются между собой.
Смотри также:
(c) 2015, Симоненко Евгений А. [email protected]