Передача массива byte [] в качестве нескольких аргументов для метода

0

Рассмотрим следующую ситуацию: (псевдо-код)

//All our luscious data
char theChar = 123;
int theInt = 4324;
char[] theCharArray = "sometext";

//Make an array to hold all of that data.
byte[] allTheVars = new *byte[sizeOfArray];

//Copy all vars into "allTheVars"
copyToEndOfArray(theChar, allTheVars);
copyToEndOfArray(theInt, allTheVars);
copyToEndOfArray(theCharArray, allTheVars);

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

//This is the function that will take in the data we sent over the network.
void remotelyCalledInternetFunction(char aChar, int anInt, char[] aCharArray)
{

}

Вместо того, чтобы вручную разбивать каждую переменную на указанный тип путем утомительного копирования из массива байтов, можете ли вы использовать метод "авторазделить" переменные, выполнив что-то вроде этого?

//Pass the byte array. The method knows what types it needs, maybe it will auto-split the data correctly?
remotelyCalledInternetFunction(allTheVars);

Если нет, есть ли что-то подобное, что я мог бы сделать?


EDIT: Любой способ сделать что-то подобное?

remotelyCalledInternetFunction(allTheVars);
//Takes first 2 bytes of the array, the next 4 bytes, and the rest for the char[]?
void remotelyCalledInternetFunction(char aChar, int anInt, char[] aCharArray)
{

}
  • 0
    Я не знаю, что вы пытаетесь достичь, но вы не можете использовать сокеты и байтовые буферы?
  • 1
    То, что вы описываете, называется «сортировкой» аргументов. Все библиотеки RPC предоставляют методы для этого автоматически. Используйте один из них вместо изобретения колеса.
Показать ещё 1 комментарий
Теги:
methods
arguments
bytearray

2 ответа

0
Лучший ответ

Хорошо, как сказал Бармар в комментариях, то, что я пытаюсь выполнить, уже было выполнено с помощью RPC (Remote Procedure Calls) и маршалинга. Он рекомендовал найти хорошую библиотеку вместо того, чтобы изобретать колесо.

Библиотека, которую я обнаружил, выглядит довольно неплохо: https://github.com/cinemast/libjson-rpc-cpp

(jozef также неплохо справился с использованием структур, спасибо за это: D)

EDIT: Мне нужна библиотека для игры с низкой задержкой в онлайн-игре, поэтому я, вероятно, в конечном итоге напишу свой собственный.

1

Я бы предложил использовать структуру для хранения и передачи данных, как показано ниже. Это обеспечило бы автоматическое разделение данных на приемной функции.

struct myStruct {
char theChar;
int theInt;
char[] theCharArray;
}

Затем вы можете использовать memcopy с аргументами для этой структуры, обратитесь → Отправить struct over socket в C.

  • 0
    Это очень близко к тому, что я пытаюсь достичь! Библиотеки RPC, которые Barmar упомянул с автоматическим «Marshaling», все же ближе. Спасибо за ваш вклад!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню