Доброго времени суток!
Вопрос такой: есть сервер, который написан на старом добром C... (Исходников к нему нету). Пишу клиента на C#.
При пересылке данных серверу проблем не возникает, а вот при получении данных имеем следующее:
приходит byte[] {0x12, 0x34, 0x56, 0x78}, но после преобразования к чему-нить целочисленному (например Int32), имеем
число 0x78563412. Как мне добиться, чтоб преобразование не переставляло байты?
Пример данных:
[StructLayout(LayoutKind.Sequential, Pack = 1, Size = 4, CharSet = CharSet.Auto), CLSCompliant(true)]
public class ErrorCodeEncapsulate
{
[MarshalAs(UnmanagedType.U4)]
public ErrorCodes errCode = ErrorCodes.None;
}
public enum ErrorCodes
{
None = 0x00000001,
InvalidNickOrPassword = 0x00000002,
ServiceTemporarilyUnavailable = 0x00000004,
AllOtherErrors = 0x00000008,
}
Пример кода, который производит преобразование:
// получаем ч/з сеть в buffer след. массив байт:
// 0x00 0x00 0x00 0x02
// ожидаем после преобразования получить:
// 0x00000002
IntPtr ptr = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, 0);
ErrorCodeEncapsulate caps = new ErrorCodeEncapsulate();
Marshal.PtrToStructure(ptr, caps);
// caps.errCode == 0x02000000
// Почему и как это поправить???
Заранее благодарен!
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Я делал программу на .Net для связи с DOS-программой. Пользовался: BinaryReader.ReadUInt32() и т.п.