Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
imkerya
1 / 1 / 0
Регистрация: 18.12.2013
Сообщений: 12
#1

Преобразование структуры в байтовый массив - C++

18.02.2014, 22:02. Просмотров 542. Ответов 6
Метки нет (Все метки)

Нужно преобразовать структуру данных в байтовый массив для передачи на сервер от клиента и так же обратно, используя сокеты
И нужно, соответственно обратно, из байтового массива в структуру.
или класс.
VS2013
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2014, 22:02     Преобразование структуры в байтовый массив
Посмотрите здесь:

C++ Неявное преобразование типа данных через структуры
C++ Преобразование в массив
C++ Преобразование значения переменной (long) через функцию в значения структуры
Структуры. Дан массив записей, содержащих дату и время. Упорядочить этот массив в порядке «возрастания» C++
C++ Преобразование указателя в массив
C++ Преобразование строки символов в массив
Запись файла в байтовый массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
18.02.2014, 22:26     Преобразование структуры в байтовый массив #2
Во-первых структуру лучше упаковать по байтовой границе:
C++
1
2
3
4
5
6
7
8
#pragma pack(push, 1)
struct foo {
  float a;
  double b;
  char c;
  int d;
}
#pragma pack(pop)
Во-вторых можно использовать объединение
C++
1
2
3
4
union foo_splitted {
  foo data;
  char array[sizeof(foo)];
}
Пишем в структуру, извлекаем значения из массива, на той стороне пишем в массив и извлекаем значения из структуры.
Можно попробовать такой вариант
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
18.02.2014, 22:39     Преобразование структуры в байтовый массив #3
iRomul, разве в объявлении размера массива не должна быть константа?
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
18.02.2014, 22:46     Преобразование структуры в байтовый массив #4
Kuzia domovenok, а разве sizeof не определяет число на стадии компиляции? По крайней мере я читал про вычислимые константы в C++11, и если sizeof действительно срабатывает на стадии компиляции, то и сработать эта конструкция должна.

Добавлено через 3 минуты
Kuzia domovenok, [link]
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
18.02.2014, 23:16     Преобразование структуры в байтовый массив #5
Нууу... Для меня C++11 это другой язык! Я ещё не все фичи Си без плюсов и С++03 выучил. Каждый раз что-то новое встречаю.
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
18.02.2014, 23:18     Преобразование структуры в байтовый массив #6
Kuzia domovenok, в таком случае либо заранее считать размер структуры со всеми вытекающими, либо брать заведомо большой массив, что тоже не самый лучший вариант, но зато можно спокойной модифицировать исходную структуру. Может еще какие-то средства есть.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2014, 23:24     Преобразование структуры в байтовый массив
Еще ссылки по теме:

Как лучше разбить байтовый массив на части? C++
C++ Двух байтовый символьный тип
Поиск префикса и байтовый массив C++
Помещение структуры в вектор, удаление структуры, изменение элементов структуры C++
Преобразование из string в массив char C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
18.02.2014, 23:24     Преобразование структуры в байтовый массив #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Нууу... Для меня C++11 это другой язык!
sizeof работает на этапе компиляции во всех стандартах С++
Yandex
Объявления
18.02.2014, 23:24     Преобразование структуры в байтовый массив
Ответ Создать тему
Опции темы

Текущее время: 14:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru