То, как вы это делаете, полностью зависит от того, как вы представляли значение, когда передавали его через MQTT.
Если вы передали его в двоичном формате - например, вы опубликовали целое число в виде серии байтов - тогда вы такженужно знать порядок байтов и количество байтов.Скорее всего, это наименее значимый байт первым (поэтому, если целое число в шестнадцатеричном формате было 0x1234, оно будет передаваться как два байта - 0x34, а затем 0x12) и 32 бита.
Если вы передаете двоичный файл между двумя одинаковымина компьютерах с аналогичным программным обеспечением, вероятно, у вас все будет в порядке (до тех пор, пока это не изменится), но если компьютеры отличаются или программное обеспечение отличается, вы имеете дело с представлениями целого числа, которые будут зависеть от используемой вами платформы.,Даже использование разных языков на двух концах может иметь значение - Python может представлять одно целое число, а C - другое, даже если они работают на идентичных процессорах.
Так что, если вы передаете в двоичном формате, вы должны действительно выбрать машину-независимое представление.
Если вы выполняете передачу в двоичном формате и не пытаетесь сделать машинно-независимое представление, код будет выглядеть примерно так:
byte *payload;
int payload_length;
int result;
if(payload_length < sizeof(int)) {
HANDLE THIS ERROR
} else {
result = *(int *)payload;
}
Это проверяет, чтобы убедиться, что естьдостаточно байтов для представления двоичного целого числа, а затем использует приведение для извлечения целого числа из полезной нагрузки.
Если вы передали в двоичном формате в машинно-независимом формате, вам нужно будет выполнить любое преобразование, необходимое дляархитектура приема.
Я не рекомендую передавать в двоичном формате, если вы не знаете, что делаете, и у вас есть для этого веские причины.Большинство приложений сегодня будут нормально передавать в виде текста - что можно сказать, это машинно-независимое представление.
Наиболее вероятной альтернативой передаче в двоичном виде является текст - который может быть машинно-независимым форматом.Если вы передаете целое число в виде текста, ваш код будет выглядеть примерно так:
byte *payload;
int payload_length;
char payload_string[payload_length + 1];
int result;
memcpy(payload_string, payload, payload_length);
payload_string[payload_length] = '\0';
result = atoi(payload_string);
Этот код использует временный буфер для копирования полезной нагрузки.Нам нужно обрабатывать полезную нагрузку как строку C, а строки C имеют дополнительный байт в конце - '\ 0' - который указывает конец строки.В полезной нагрузке для этого нет места, и индикатор конца строки может или не может быть отправлен как часть полезной нагрузки, поэтому мы гарантируем, что он есть, скопировав полезную нагрузку и добавив ее.
После этого просто позвонить atoi()
, чтобы преобразовать строку в целое число.