Преобразование Intptr в размерC#

Место общения программистов C#
Ответить
Anonymous
 Преобразование Intptr в размер

Сообщение Anonymous »

У меня есть IntPtr, который представляет адрес памяти. Есть ли простой способ определить размер байтов, расположенных по адресу памяти, на который указывает IntPtr?
Я попытался создать цикл, но это привело к нарушению доступа без получения результата.
У меня нет растрового изображения. У меня есть IntPtr. Нигде в моем вопросе я не спрашиваю о растровом изображении.
Вместо того, чтобы возвращать значение int, возвращаю void и записываю в поток. Записывает данные в файл, но все равно нарушает права доступа даже при попытке/перехвате.
Я могу это сделать, зная размер, но на неизвестном Scan0 я могу получить результат, но не без нарушения прав доступа. Если бы нарушение прав доступа удалось обнаружить, я мог бы заранее определить размер.
public record struct MemoryPointer(IntPtr Scan0, int Size)
{
public async Task Save(string filePath)
{
byte[] bytes = new byte[Size];
using Stream stream = File.Create(filePath);
unsafe
{
byte* pointer = (byte*)Scan0;
for (int index = 0; index < Size; index++, pointer++)
{
bytes[index] = *pointer;
}
}
await stream.WriteAsync(bytes);
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... tr-to-size
Ответить

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

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

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

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

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