Обратите внимание, что это не домашняя работа, и я выполнил поиск перед началом новой темы Я получил Сохранить int в массиве символов?
Я искал ответ, но не получил удовлетворительного ответа в вышеуказанной теме.
Вот мое требование: я хочу кодировать свои данные (скажем, целое число) в байтовом массиве, а затем передавать по сети, а затем декодировать на другом конце и обрабатывать их.
Вот часть кодирования:
const int MAX=5;
uint32_t a = 0xff00ffaa;
char byte_array[1024]; // this is the array to be transferred over the network
char buff[MAX]="";
sprintf(buff,"%4d",a);
memcpy(byte_array,buff,4);
// fill remaining stuff in the byte array and send it over the network
Вот часть декодирования:
const int MAX=5;
char buff[MAX]="";
strncat(buff,byte_array,4)
int i=atoi(buff);
// Work with i
Вот мои вопросы:
1) Является ли приведенный выше код переносимым? Я думаю, что это (пожалуйста, поправьте меня)
2) Теперь я хочу закодировать байтовый массив с 3 байтами (но целочисленный размер равен 4), т.е. сказать, что целое число хранит 0x00ffaabb, и я просто хочу, чтобы массив байтов имел ff int 0-й индекс aa в 1-м индексе и BB во втором индексе. Как это сделать?
snprinf
не работает или, может быть, я что-то упустил.
Человек, который внедрил любой сетевой протокол, может легко помочь мне.
Я думаю, что логика декодирования все еще будет работать. (strncat(buff,byte_array,3)
с последующим atoi
вызовом функции).
Вот что написано в протоколе:
--------+--------+--------+--------+------------------------------
|Version| 3 byte length | Remaining stuff
--------+--------+--------+--------+------------------------------
Версия составляет 1 байт, за которой следует 3-байтовая длина сообщения.
Я надеюсь, что смогу прояснить мою проблему