Однозначно определить 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;
   }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы