Однозначно определить IntPtr 4хбайтовым - C#
Формулировка задачи:
Всем привет. Как точно указать размер IntPtr? Т.е. есть структура, которую считываю из файла, и размер ее должен быть постоянный. При смене разрядности на x64 IntPtr становится 8мибайтовым, соотвественно меняется и размер структуры. Так вот как в структуре объявить intptr так чтоб он всегда был 4 байта? В самой программе можно использовать и 8мибайтовый, но при чтении тоько 4
Теоретически можно чз маршалинг, но я не знаю какой тип выбрать
Решение задачи: «Однозначно определить IntPtr 4хбайтовым»
textual
Листинг программы
using System;
using System.IO;
namespace Temp
{
class Program
{
static void Main(string[] args)
{
Soma soma1 = new Soma { val1 = (IntPtr)10, val2 = 20, val3 = (IntPtr)30 };
using(BinaryWriter writer = new BinaryWriter(File.Create("1.bin")))
{
writer.Write(soma1.val1.ToInt32());
writer.Write(soma1.val2);
writer.Write(soma1.val3.ToInt32());
};
Soma soma2 = default(Soma);
using(BinaryReader reader = new BinaryReader(File.OpenRead("1.bin")))
{
soma2.val1 = (IntPtr)reader.ReadInt32();
soma2.val2 = reader.ReadInt32();
soma2.val3 = (IntPtr)reader.ReadInt32();
}
}
}
public struct Soma
{
public IntPtr val1;
public int val2;
public IntPtr val3;
}
}