Это может быть трудно сделать при отправке из C в C.
Если у вас есть структура данных, приведите ее к массиву байтов / символов, а затем просто отправьте ее вслепую, иногда вы можете столкнуться с большими проблемами при декодировании ее на другом конце.
Это связано с тем, что иногда компилятор решил оптимизировать способ упаковки данных в структуре, поэтому в необработанных байтах он может выглядеть не совсем так, как вы ожидаете, в зависимости от того, как вы его кодируете.
Это действительно зависит от компилятора!
Существуют прагмы компилятора, которые можно использовать для оптимизации упаковки. См. Справочник по препроцессору C / C ++ - pack
Другая проблема - это 32/64-битная проблема, если вы просто используете «int» и «long» без указания количества байтов ... но вы сделали это: -)
К сожалению, Java на самом деле не имеет структур ... но она представляет ту же информацию в классах.
Я рекомендую вам создать класс, состоящий из ваших переменных, и просто создать собственную функцию распаковки, которая будет извлекать байты из полученного пакета (после проверки его правильности после передачи), а затем загружать их в класс. .
например. У вас есть класс данных, такой как
class Data
{
public int moteID;
public int status; //block or not
public int tc_1;
public int tc_2;
}
Затем, когда вы получите байтовый массив, вы можете сделать что-то вроде этого
Data convertBytesToData(byte[] dataToConvert)
{
Data d = Data();
d.moteId = (int)dataToConvert[0];
d.status = (int)dataToConvert[1];
d.tc_1 = ((int)dataToConvert[2] << 8) + dataTocConvert[3]; // unpacking 16-bits
d.tc_2 = ((int)dataToConvert[4] << 8) + dataTocConvert[5]; // unpacking 16-bits
}
У меня может быть 16-битная распаковка в неправильном направлении, это зависит от порядкового номера вашей системы C, но вы сможете поиграть и посмотреть, правильно ли это или нет.
Некоторое время я не играл с Java, но, надеюсь, в функции int, встроенные в наши дни, может входить byte [].
Во всяком случае, я знаю, что есть для C #.
Учитывая все это, если вы не выполняете передачу данных с высокой скоростью, определенно посмотрите на JSON и Protocol Buffers!