Запись и считывание памяти напрямую

dishlo
Дата: 09.05.2006 14:48:17
Как передать по сети содержимое структуры, то есть на одном конце превратить в массив байтов, а на другом эти байты превратить обратно в структуру.
На с++ это не вопрос, а тут я споткнулся. Опытный народ подскажите?

Допустим

class MyStruct
{
int i;
char a;
}

MyStruct st = new MyStruct();
byte[] data = new byte[sizeof(MyStruct)];
??? // Как напрямую записать содержимое памяти st в массив data?
...
MyStruct new_st = new MyStruct();
...
??? // Как провести обратный процесс, из массива записать данные в стуктуру new_st?

Andres 1
Дата: 09.05.2006 14:57:17
http://www.intuit.ru/department/pl/csharp/19/6.html
Только там в примерах вроде FileStream, а вы хотели использовать MemoryStream (byte[])
dishlo
Дата: 09.05.2006 15:06:08
Отравка данных написана на с++, поэтому собственно необходимо реалзовать вторую часть - есть полученные по сети данные, нужно превратить их в структуру, но уже на C#.
Andres 1
Дата: 09.05.2006 15:27:08
dishlo
Отравка данных написана на с++, поэтому собственно необходимо реалзовать вторую часть - есть полученные по сети данные, нужно превратить их в структуру, но уже на C#.

Это?
http://www.codeproject.com/vb/net/netcopymemorysample.asp
dishlo
Дата: 09.05.2006 15:54:29
Это вроде похоже, но уж очень громоздко получается.
Пока попробую воспользоваться таким кодом:

unsafe
{
MyStruct msg = new MyStruct();

byte[] data = new byte[sizeof(MyStruct)];
SafeReceive(data); // Считываю с сокета мою структуру
int p = (int)&msg;							

// копирую побайтово по адресу 		
for(int i = 0; i < data.Length; i++)
{
	(*(char*)(p+i)) = Convert.ToChar(data[i]);
}						

// предпологаю что здесь уже имею рабочуюю структуру с присланной информацией
// еще не проверял, надеюсь работает
if(msg.Param1) doSomething();
if(msg.Param2) doSomethingElse();

}

Relic Hunter
Дата: 09.05.2006 18:53:48
dishlo
Это вроде похоже, но уж очень громоздко получается.
А почитать про [SerializableAttribute] и ISerializable не судьба?