Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,153
Записей в блоге: 3

Сериализация структуры

28.05.2016, 02:08. Показов 2282. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго!
Создаю структуру, преобразую ее а байты, а в обратном преобразовании она не полная.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  struct MyStruct
    {
      AnsiString P;
      int d;
    };
 
  MyStruct* st  = new MyStruct;
  MyStruct* st1 = new MyStruct;
 
  st->P="Test";
  st->d=500;
 
  TByteDynArray Z= RawToBytes(st, sizeof(st));
  BytesToRaw(Z,st1, Z.Length);
 
  Memo1->Lines->Add(st1->P); //<----все нормально
  Memo1->Lines->Add(st1->d); //<----вобще не нормально
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.05.2016, 02:08
Ответы с готовыми решениями:

Сериализация
Есть такая штука - сериализация. У меня есть компонент PaintBox, в него с помощью мыши заносятся примитивы. Но после того, как перекрыть...

Сериализация структуры из массива
Помогите пж..:) есть структура public struct DiskProperties { public Int16 length; //длина...

Сериализация и десериализация структуры
Есть структура с полями string , int. Вся информация пишется в файл.txt, мне нужно сделать сериализацию и десериализацию этого файла. ...

14
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
28.05.2016, 02:26
Лучший ответ Сообщение было отмечено Dinkin как решение

Решение

C++
1
TByteDynArray Z= RawToBytes(st, sizeof(MyStruct));
Но это все неправильно, потому что AnsiString - ссылочный тип. Как только ты передашь свой TByteDynArray на другую машину, где память под st->p не выделялась, содержимое строки будет безвозвратно утеряно.
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,153
Записей в блоге: 3
28.05.2016, 13:01  [ТС]
volvo, так даже в пределах одной функции неверно конвертируется
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
28.05.2016, 13:25
У меня нормально конвертируется в пределах функции:
Миниатюры
Сериализация структуры  
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,153
Записей в блоге: 3
28.05.2016, 13:44  [ТС]
Вот блин,неужели очередной косяк в новых студиях.
Миниатюры
Сериализация структуры  
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
28.05.2016, 14:07
Dinkin, 62 строка. Поправь как volvo во втором посте подсказал.
У меня тож работает (ХЕ7)
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
28.05.2016, 14:07
Dinkin, Ты так и не исправил то, что я показал, и копируешь только первые 4 байта структуры (размер указателя, коим является st)
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,153
Записей в блоге: 3
28.05.2016, 14:17  [ТС]
Не заметил исправлений.
Так работает..но я как понимаю это если в структуре фиксированные данные, а если один из параметров Stream? это уже не подойдет?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
28.05.2016, 14:22
Нет, если есть ссылочные типы - работать не будет. И об этом я тоже уже писал. Нужна сериализация.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,153
Записей в блоге: 3
28.05.2016, 14:57  [ТС]
Спасибо,я этого не знал. Получается int, как AnsiString, являются ссылочными.
volvo,
А если структура такого типа, это нормально?

C++
1
2
3
4
5
   struct MyStruct
    {
      TByteDynArray  B;
      TMemoryStream *F;
    };
Тут выходит что байты будут конвертироваться в последствии в тежи байты.
0
1408 / 572 / 127
Регистрация: 31.10.2011
Сообщений: 1,960
28.05.2016, 15:09
int не ссылочный.

вот например с такой структурой проблем бы не было
C++
1
2
3
4
5
6
7
struct MyStruct
    {
      int d;
      char c[255];
      double f;
      //и тд и тп
    };
а что нужно в итоге?
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,153
Записей в блоге: 3
29.05.2016, 13:04  [ТС]
_Dimon_,
Мне в итоге нужно с компа на комп отправить файл с сопровождающим описанием (описанием)

Добавлено через 21 час 51 минуту
Еще раз доброго!
Может подскажете какой тип переменных необходимо зайдействовать, что бы передать байты?
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,153
Записей в блоге: 3
02.06.2016, 10:45  [ТС]
В общем не получилось нормально передать байты. Друг на делфи написал функцию по «склеиванию» переменных в массиве (она же их и расклеивает). Вроде нормально работает. Но вот не могу перевести Move.на Builder.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//---------------------------------------------------------------------------
void _fastcall TForm1::Test()
{
  TIdBytes ToBytes;
  int Offset=0,L;
  struct MyStruct
 {
   int A;
   TIdBytes F;
   int B;
   int C;
   int D;
   int E;
 };
 
 MyStruct st;
  st.A=50;
  st.F=Memo2->Text.BytesOf();
  st.B=60;
  st.C=70;
  st.D=80;
  st.E=90;
 
  L=st.F.Length;
  ToBytes.set_length(sizeof(MyStruct)+L) ;
 
 Move(st.A,ToBytes[Offset],sizeof(st.A));
 
}
//---------------------------------------------------------------------------
[bcc32 Error] Unit1.cpp(60): E2034 Cannot convert 'int' to 'const void *'
Full parser context
Unit1.cpp(35): parsing: void _fastcall TForm1::Test()
Миниатюры
Сериализация структуры  
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
02.06.2016, 11:14
Цитата Сообщение от Dinkin Посмотреть сообщение
отправить файл с сопровождающим описанием (описанием)
Цитата Сообщение от Dinkin Посмотреть сообщение
подскажете какой тип переменных необходимо зайдействовать
Добавить в структуру еще одно поле - размер файла.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,153
Записей в блоге: 3
02.06.2016, 11:38  [ТС]
SatanaXIII, Пробовал. Не помогло.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.06.2016, 11:38
Помогаю со студенческими работами здесь

Сериализация иерархической стоковой структуры!
Доброго времени суток! Есть вот структура, древовидная. Каждый элемент это строка. Вложенность неопределенной глубины. Необходимо...

Сериализация структуры для отправки по usb
В общем мне нужно отправить структуру с ПК на мконтроллер по USB, для этого мне посоветовали воспользоваться функциями htonl и обратной ей,...

Сериализация структуры и пошаговое считывания данных из файла
Привет всем!!! Проблема следующая: есть класс метод которого генерирует большое количество данных с последующей записью в структуру. Она...

Windows Forms и сериализация. Сериализация контрола
Привет всем. Для того что бы набраться опыта делаю игрушку-лабиринт. В есть старт и финиш. Нужно вести мышкой и не попадать на стены. Игру...

Помещение структуры в вектор, удаление структуры, изменение элементов структуры
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный элемент структуры. 2 - удалять...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru