Как преобразовать структуру в массив байтов в C#?C#

Место общения программистов C#
Ответить
Anonymous
 Как преобразовать структуру в массив байтов в C#?

Сообщение Anonymous »

Как преобразовать структуру в массив байтов в C#?

Я определил структуру следующим образом:

Код: Выделить всё

public struct CIFSPacket
{
public uint protocolIdentifier; //The value must be "0xFF+'SMB'".
public byte command;

public byte errorClass;
public byte reserved;
public ushort error;

public byte flags;

//Here there are 14 bytes of data which is used differently among different dialects.
//I do want the flags2. However, so I'll try parsing them.
public ushort flags2;

public ushort treeId;
public ushort processId;
public ushort userId;
public ushort multiplexId;

//Trans request
public byte wordCount;//Count of parameter words defining the data portion of the packet.
//From here it might be undefined...

public int parametersStartIndex;

public ushort byteCount; //Buffer length
public int bufferStartIndex;

public string Buffer;
}
В моем основном методе я создаю его экземпляр и присваиваю ему значения:

Код: Выделить всё

CIFSPacket packet = new CIFSPacket();
packet.protocolIdentifier = 0xff;
packet.command = (byte)CommandTypes.SMB_COM_NEGOTIATE;
packet.errorClass = 0xff;
packet.error = 0;
packet.flags = 0x00;
packet.flags2 = 0x0001;
packet.multiplexId = 22;
packet.wordCount = 0;
packet.byteCount = 119;

packet.Buffer = "NT LM 0.12";
Теперь я хочу отправить этот пакет по сокету. Для этого мне нужно преобразовать структуру в массив байтов. Как я могу это сделать?

Мой полный код выглядит следующим образом.

Код: Выделить всё

static void Main(string[] args)
{

Socket MyPing = new Socket(AddressFamily.InterNetwork,
SocketType.Stream , ProtocolType.Unspecified ) ;

MyPing.Connect("172.24.18.240", 139);

//Fake an IP Address so I can send with SendTo
IPAddress IP = new IPAddress(new byte[] { 172,24,18,240 });
IPEndPoint IPEP = new IPEndPoint(IP, 139);

//Local IP for Receiving
IPEndPoint Local = new IPEndPoint(IPAddress.Any, 0);
EndPoint EP = (EndPoint)Local;

CIFSPacket packet = new CIFSPacket();
packet.protocolIdentifier = 0xff;
packet.command = (byte)CommandTypes.SMB_COM_NEGOTIATE;
packet.errorClass = 0xff;
packet.error = 0;
packet.flags = 0x00;
packet.flags2 = 0x0001;
packet.multiplexId = 22;
packet.wordCount = 0;
packet.byteCount = 119;

packet.Buffer = "NT LM 0.12";

MyPing.SendTo(It takes byte array as parameter);
}
Каким будет фрагмент кода?

Подробнее здесь: https://stackoverflow.com/questions/327 ... array-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»