Однозначно определить 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;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д