Bin to HEX и операции с этими массивами.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

Нужна консультация.

Есть датчики, их состояние 0 или 1.

Их к примеру может быть 4 или 8 или 16, и кроме них другие  есть датчики. Есть сервер который примет значения в хексе.

напрашивается вывод, чтобы их отображать как 11110111  10101011  и т.д. потов в хекс преобразовывать.

хекс - FF,FA,AD  - уже передается, сервер их успешно обрабатывает эти данные.

Передавать на внешнее устройство сбора информации хочу как HEX в масиве данных.

{FF,FA,AD,11,18,A1, и т.д...}

 

Вопрос - как лучше построить систему обработки этих входящих данных.

напрашивается вариант работы с массивами данных?

char* myStrings[]={"11111111""10101010""00001111",

"10101111""00000000","10100000"};

char* myStrings[]={"myDAT1""myDAT2""myDAT3",
"myDAT4""myDAT5","myDAT6"};
 

int myDAT1[] = {2, 4, 8, 3, 6};

 

Как бы это лучше организовать, чтобы не изобретать велосипед? в общем запутался, по какому пути здесь нужно шагать?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы уверены, что Вам нужно передавать именно строки? Нельзя передавать просто двоичные данные? Это требование протокола, чтобы только символы?

sadman41
Offline
Зарегистрирован: 19.10.2016

Сейчас модно в JSON-e гнать, например, а не массивами странного вида. Это ежели текстовый формат использовать.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

ЕвгенийП пишет:

Вы уверены, что Вам нужно передавать именно строки? Нельзя передавать просто двоичные данные? Это требование протокола, чтобы только символы?

серверная часть уже готова, и ее не будет никто переделывать. Поэтому ответ утвердительный.

b707
Offline
Зарегистрирован: 26.05.2017

Short Circuit пишет:

серверная часть уже готова, и ее не будет никто переделывать. Поэтому ответ утвердительный.

Замыкание - это же глупость! Надеюсь, вы это хоть понимаете?

Передавать хекс как хекс много проще, чем строками - да и обрабатывать удобнее.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

sadman41 пишет:

Сейчас модно в JSON-e гнать, например, а не массивами странного вида. Это ежели текстовый формат использовать.

я так понимаю, так оно и будет, ведь в JSON-e можно и просто хекс кода передавать..

 

мне бы поэтапно некоторые моменты понять.

К примеру, держим 8 датчиков 00000000, сделать это массивом?

и тут второй датчик сработал. как сделать 01000000 ?  или это пусть будет два байта в памяти, и туда сделать добавление?  А потом эти два байта с памяти просто считывать как хекс, вставлять в отправляемую строку и все? А как тогда делать добавление сработки датчика 2 датчика 3 ? Здесь у меня знаний не хватает, но если где есть ардуиновские примеры, и наверное это имеет какоето общее навзвание? с удовольствием ознакомлюсь с информацией по вашей наводке.Всем заранее огромное спасибо за любые подсказки.

sadman41
Offline
Зарегистрирован: 19.10.2016

Что касается JSON - в нем сущности не собираются в единые строки сендером и не разбираются ресивером. Т.е. это можно, но смысла не имеет. Зачем иметь хэш-массив и не пользоваться его главным преимуществом - человеко-понятными индексами? Как будете к массиву-в-строке JSONPath применять, например?

Поэтому, каждому датчику - свой ключ и значение. Конечно, тут имеется оверхед. Но, с другой - имеется и инструментарий, готовые парсеры на серверной стороне.

Пример... сложно с планшета набивать. Что-то вроде {"sensorOneState": 1, "SensorTwoState": 3, ... }

Но, так как ваш вопрос для меня все еще абстрактен, совет мой очень обобщён.

b707
Offline
Зарегистрирован: 26.05.2017

Short Circuit пишет:

К примеру, держим 8 датчиков 00000000, сделать это массивом?

нет, просто переменная типа byte

Short Circuit пишет:

и тут второй датчик сработал. как сделать 01000000 ? 

если второй датчик, то это будет 00000100 - биты считаются справа и начинаются c нулевого :)

Short Circuit пишет:

А как тогда делать добавление сработки датчика 2 датчика 3 ?

b|=(1<<N);  // добавление сработки датчика номер N

это называется битовые операции

 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

да...  я только что тоже в разных источникак вычитал -  что мне нужны битовые операции.. итого - что для начала не сильно заумное почитать, с примерами и прочим?

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015
MaksVV
Offline
Зарегистрирован: 06.08.2015

если в ардуино IDE , то есть упрощённый bitRead bitWrite  только медленнее работает 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Если бы Вы толком объяснили, что Вам нужно, то может там и без битовых операций можно обойтись.

Вам нужно из 16 битового числа сделать массив из 16 элементов с нулями и удиницами? Или, наоборот? Или что?

mixail844
Offline
Зарегистрирован: 30.04.2012

ЕвгенийП пишет:

Если бы Вы толком объяснили, что Вам нужно, то может там и без битовых операций можно обойтись.

Вам нужно из 16 битового числа сделать массив из 16 элементов с нулями и удиницами? Или, наоборот? Или что?

если я прально понял,ТСу надо..допустим есть 2^n,n>0 кнопок подключенных к дуине ...состояние каждой 0 или 1. 

ТС предлагает состояние этих кнопок помещать в переменную побитово. ,допустим 8 кнопок имеют состояние поочередное состояние 0 и 1 то есть 0b01010101 , то есть 85 ,то есть 0х55

далее ТС хочет сделать из 0х55 -> "55" ,подразумевая то что сервак принимая данные будет знать что "55" это 16-тиричная система в ASCII формате... то есть примит уже (минимум) 2 байта(а не 1 как на стороне дуины) и уже как то обработает...и желательно что вы таких вот 0х55 был массив

ТС,так ? 

sadman41
Offline
Зарегистрирован: 19.10.2016

Да он сам себя запутает этими трансформациями.

MaksVV
Offline
Зарегистрирован: 06.08.2015

Short Circuit пишет:
Есть сервер который примет значения в хексе.....

напрашивается вывод, чтобы их отображать как 11110111  10101011  и т.д. потом в хекс преобразовывать.

хекс - FF,FA,AD  - уже передается, сервер их успешно обрабатывает эти данные.

Передавать на внешнее устройство сбора информации хочу как HEX в масиве данных.

{FF,FA,AD,11,18,A1, и т.д...}

хочу вам открыть секрет 

{FF,FA,AD,11,18,A1}

и

{BIN11111111, BIN11111010, BIN10101101, BIN00010001, BIN00011000, BIN10100001}

это одно и тоже! Нет никаких HEX DEC, для МК есть только BIN, всё остальное лишь вариант записи

 

 

 

mixail844
Offline
Зарегистрирован: 30.04.2012

MaksVV пишет:

Short Circuit пишет:
Есть сервер который примет значения в хексе.....

напрашивается вывод, чтобы их отображать как 11110111  10101011  и т.д. потом в хекс преобразовывать.

хекс - FF,FA,AD  - уже передается, сервер их успешно обрабатывает эти данные.

Передавать на внешнее устройство сбора информации хочу как HEX в масиве данных.

{FF,FA,AD,11,18,A1, и т.д...}

хочу вам открыть секрет 

{FF,FA,AD,11,18,A1}

и

{BIN11111111, BIN11111010, BIN10101101, BIN00010001, BIN00011000, BIN10100001}

это одно и тоже! Нет никаких HEX DEC, для МК есть только BIN, всё остальное лишь вариант записи

 

все же между "00010001" ,"0x18","18", 18 , 00010001 разница есть .

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

MaksVV пишет:

Short Circuit пишет:
Есть сервер который примет значения в хексе.....

напрашивается вывод, чтобы их отображать как 11110111  10101011  и т.д. потом в хекс преобразовывать.

хекс - FF,FA,AD  - уже передается, сервер их успешно обрабатывает эти данные.

Передавать на внешнее устройство сбора информации хочу как HEX в масиве данных.

{FF,FA,AD,11,18,A1, и т.д...}

хочу вам открыть секрет 

{FF,FA,AD,11,18,A1}

и

{BIN11111111, BIN11111010, BIN10101101, BIN00010001, BIN00011000, BIN10100001}

это одно и тоже! Нет никаких HEX DEC, для МК есть только BIN, всё остальное лишь вариант записи

да, похоже вы правы, я суть понял, осталось только проверить при передаче данных на сервак, спасибо за наводку, это для меня многое упростит.