Compartir a través de


Método Marshal.ReadByte (IntPtr)

 

Publicado: octubre de 2016

Lee un único byte desde la memoria no administrada.

Espacio de nombres:   System.Runtime.InteropServices
Ensamblado:  mscorlib (en mscorlib.dll)

Sintaxis

[SecurityCriticalAttribute]
public static byte ReadByte(
    IntPtr ptr
)
public:
[SecurityCriticalAttribute]
static unsigned char ReadByte(
    IntPtr ptr
)
[<SecurityCriticalAttribute>]
static member ReadByte : 
        ptr:nativeint -> byte
<SecurityCriticalAttribute>
Public Shared Function ReadByte (
    ptr As IntPtr
) As Byte

Parámetros

  • ptr
    Type: System.IntPtr

    Dirección en la memoria no administrada desde la que se va a leer.

Valor devuelto

Type: System.Byte

Byte leído de la memoria no administrada.

Excepciones

Exception Condition
AccessViolationException

ptr no es un formato reconocido.

O bien

El valor de ptr es null.

O bien

ptr no es válido.

Comentarios

ReadByte tiene un desplazamiento implícito de 0. Este método permite la interacción directa con una matriz de bytes de estilo C no administrada, elimina el gasto de copiar toda una matriz no administrada (mediante Marshal.Copy) a una matriz administrada distinta antes de leer los valores de sus elementos.

Se admite la lectura desde ubicaciones de memoria desalineadas.

Ejemplos

En el ejemplo siguiente se crea un bloque de memoria no administrada, se escribe un byte en la memoria no administrada, se vuelve a leer los bytes de memoria no administrada y a continuación se desecha la memoria no administrada.

using System;
using System.Runtime.InteropServices;

 class Example
 {
     static void Main(string[] args)
     {
          // Allocate 1 byte of unmanaged memory.
          IntPtr hGlobal = Marshal.AllocHGlobal(1);

          // Create a new byte.
          byte b = 1;
          Console.WriteLine("Byte written to unmanaged memory: " + b);

          // Write the byte to unmanaged memory.
          Marshal.WriteByte(hGlobal, b);

          // Read byte from unmanaged memory.
          byte c = Marshal.ReadByte(hGlobal);
          Console.WriteLine("Byte read from unmanaged memory: " + c);

          // Free the unmanaged memory.
          Marshal.FreeHGlobal(hGlobal);
          Console.WriteLine("Unmanaged memory was disposed.");
     }
}
Imports System
Imports System.Runtime.InteropServices

Module Example
    Sub Main()
         ' Allocate 1 byte of unmanaged memory.
         Dim hGlobal As IntPtr = Marshal.AllocHGlobal(1)

         ' Create a new byte.
         Dim b As Byte = 1

         Console.WriteLine("Byte written to unmanaged memory: {0}", b)

         ' Write the byte to unmanaged memory.
         Marshal.WriteByte(hGlobal, b)

         ' Read byte from unmanaged memory.
         Dim c As Byte = Marshal.ReadByte(hGlobal)
         Console.WriteLine("Byte read from unmanaged memory: {0}", c)

         ' Free the unmanaged memory.
         Marshal.FreeHGlobal(hGlobal)
         Console.WriteLine("Unmanaged memory was disposed.")
    End Sub
End Module

En el ejemplo siguiente se muestra cómo utilizar el ReadByte método para leer el valor de un carácter no administrado.

using namespace System;
using namespace System::Runtime::InteropServices;



void main()
{
    // Create an unmanaged byte.
    const char * myString = "b";

    // Read the c string as a managed byte.
        Byte ^ myManagedByte = Marshal::ReadByte((IntPtr) (char *) myString);

    // Display the byte to the console.
    Console::WriteLine(myManagedByte);
}

Seguridad

SecurityCriticalAttribute

requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

Información de versión

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1

Ver también

Copy
ReadByte Sobrecarga
Clase Marshal
Espacio de nombres System.Runtime.InteropServices

Volver al principio