Как преобразовать произвольную структуру в массив байтов?
От: lesovick Россия  
Дата: 17.12.09 10:24
Оценка:
У меня есть полностью определённый объект некоторого класса. Я хочу превратить его в массив байтов, а затем массив байтов превратить обратно в этот объект. Как это можно сделать? Явное преобразование тут не работает.
Re: Как преобразовать произвольную структуру в массив байтов
От: nikov США http://www.linkedin.com/in/nikov
Дата: 17.12.09 10:26
Оценка:
Здравствуйте, lesovick, Вы писали:

L>У меня есть полностью определённый объект некоторого класса. Я хочу превратить его в массив байтов, а затем массив байтов превратить обратно в этот объект. Как это можно сделать? Явное преобразование тут не работает.


Смотря по каким правилам надо преобразовать. Что это: сериализация, интероп?
Re[2]: Как преобразовать произвольную структуру в массив бай
От: lesovick Россия  
Дата: 17.12.09 10:43
Оценка:
Вношу уточнения:

1) Программа пишется на C#.

2) По каким правилам? Не знаю. Хоть по каким-нибудь правилам. По любым правилам.

Как я понимаю, любой структуре должен однозначно соответствовать массив байтов, её представляющий. Вот я и хочу его получить. По-моему достаточно тривиальная задача, вот я и подумал, что наверняка для этого должны быть предусмотрены простые средства. Или я что-то не так понимаю?

3) Общая задача состоит в передаче пакета данных по сети по протоколу UDP. Функция UdpClient.Send отправляет данные в виде массива байтов.
Re[3]: Как преобразовать произвольную структуру в массив бай
От: nikov США http://www.linkedin.com/in/nikov
Дата: 17.12.09 10:51
Оценка:
Здравствуйте, lesovick, Вы писали:

L>Как я понимаю, любой структуре должен однозначно соответствовать массив байтов, её представляющий. Вот я и хочу его получить. По-моему достаточно тривиальная задача, вот я и подумал, что наверняка для этого должны быть предусмотрены простые средства. Или я что-то не так понимаю?


Ну тогда выбирайте из классов System.Runtime.Serialization.Formatters.Binary.BinaryFormatter и System.Runtime.InteropServices.Marshal (если структура — unmanaged тип).
Re[4]: Как преобразовать произвольную структуру в массив бай
От: nikov США http://www.linkedin.com/in/nikov
Дата: 17.12.09 10:56
Оценка:
Здравствуйте, nikov, Вы писали:

L>>Как я понимаю, любой структуре должен однозначно соответствовать массив байтов, её представляющий. Вот я и хочу его получить. По-моему достаточно тривиальная задача, вот я и подумал, что наверняка для этого должны быть предусмотрены простые средства. Или я что-то не так понимаю?


N>Ну тогда выбирайте из классов System.Runtime.Serialization.Formatters.Binary.BinaryFormatter и System.Runtime.InteropServices.Marshal (если структура — unmanaged тип).


Примеров можно нарыть в интернете: http://www.bing.com/search?q=convert+struct+to+byte+array
Re[5]: Как преобразовать произвольную структуру в массив бай
От: fkRTTI  
Дата: 17.12.09 19:09
Оценка:
Здравствуйте, nikov, Вы писали:

N>Здравствуйте, nikov, Вы писали:


L>>>Как я понимаю, любой структуре должен однозначно соответствовать массив байтов, её представляющий. Вот я и хочу его получить. По-моему достаточно тривиальная задача, вот я и подумал, что наверняка для этого должны быть предусмотрены простые средства. Или я что-то не так понимаю?


N>>Ну тогда выбирайте из классов System.Runtime.Serialization.Formatters.Binary.BinaryFormatter и System.Runtime.InteropServices.Marshal (если структура — unmanaged тип).


N>Примеров можно нарыть в интернете: http://www.bing.com/search?q=convert+struct+to+byte+array


С С# никогда не работал, просто интересно, такое там не прокатит?
YourStruct Object;
PVOID Buffer[sizeof(YourStruct)]; // INT/CHAR/BYTE...

memcpy(Buffer, &Object, sizeof(YourStruct)];
Re[6]: Как преобразовать произвольную структуру в массив бай
От: fkRTTI  
Дата: 17.12.09 19:12
Оценка: :)
N>>Примеров можно нарыть в интернете: http://www.bing.com/search?q=convert+struct+to+byte+array

RTT>С С# никогда не работал, просто интересно, такое там не прокатит?

RTT>
RTT>YourStruct Object;
RTT>PVOID Buffer[sizeof(YourStruct)]; // INT/CHAR/BYTE...

RTT>memcpy(Buffer, &Object, sizeof(YourStruct)];
RTT>


или что еще проще
for (i=0;i<sizeof(YourStruct );i++)
...((CHAR) Object)[i]...
Re: Как преобразовать произвольную структуру в массив байтов
От: HowardLovekraft  
Дата: 18.12.09 07:23
Оценка:
Совсем недавно обсуждалось
Автор: HowardLovekraft
Дата: 18.11.09
. В очередной раз.

З.Ы. IMHO, этот вопрос надо куда-то или FAQ, или в виде микро-статьи поместить.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.