Skip to content

Latest commit

 

History

History
162 lines (106 loc) · 4.11 KB

ipaddress-class.markdown

File metadata and controls

162 lines (106 loc) · 4.11 KB

[К началу] | [Библиотека SD]


Библиотека Ethernet

[Библиотека Ethernet]

Класс IPAddress

Класс IPAddress предоставляет обёртку для IP-адресов.

Подключение

Если библиотека Ethernet подключена, то для использования IPAddress ничего больше подключать не нужно. В противном случае подключайте так:

	#include "IPAddress.h"

Конструктор IPAddress()

Конструктор 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()

Метод printTo() реализует интерфейс Printable и объявлен следующим образом:

	virtual size_t printTo(Print& p) const;

В основном этот метод используется библиотечными методами print() и println() для получения текстового представления объекта (класс Print).

Оператор uint32_t()

Оператор 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;

Таким образом, обе формы представления адреса эквивалентны и легко конвертируются между собой.


Смотри также:


[К началу] | [Библиотека SD]


(c) 2015, Симоненко Евгений А. easimonenko@mail.ru