次の方法で共有


Marshal.ReadByte メソッド

定義

アンマネージ メモリから 1 バイトを読み取ります。 アライメントされていないメモリ位置からの読み取りがサポートされています。

オーバーロード

ReadByte(IntPtr, Int32)

アンマネージ メモリから、指定されたオフセット (またはインデックス) で 1 バイトを読み取ります。

ReadByte(Object, Int32)
古い.

アンマネージ メモリから、指定されたオフセット (またはインデックス) で 1 バイトを読み取ります。

ReadByte(IntPtr)

アンマネージ メモリから 1 バイトを読み取ります。

ReadByte(IntPtr, Int32)

ソース:
Marshal.cs
ソース:
Marshal.cs
ソース:
Marshal.cs

アンマネージ メモリから、指定されたオフセット (またはインデックス) で 1 バイトを読み取ります。

public:
 static System::Byte ReadByte(IntPtr ptr, int ofs);
[System.Security.SecurityCritical]
public static byte ReadByte (IntPtr ptr, int ofs);
public static byte ReadByte (IntPtr ptr, int ofs);
[<System.Security.SecurityCritical>]
static member ReadByte : nativeint * int -> byte
static member ReadByte : nativeint * int -> byte
Public Shared Function ReadByte (ptr As IntPtr, ofs As Integer) As Byte

パラメーター

ptr
IntPtr

nativeint

読み取り元のアンマネージ メモリ内のベース アドレス。

ofs
Int32

読み取る前に ptr パラメーターに追加されるバイト オフセット。

戻り値

指定されたオフセットにあるアンマネージ メモリから読み取られたバイト。

属性

例外

ベース アドレス (ptr) とオフセット バイト (ofs) は、null または無効なアドレスを生成します。

次の例では、ReadByte メソッドと WriteByte メソッドを使用して、アンマネージ配列の読み取りと書き込みを行う方法を示します。

static void ReadWriteByte()
{
    // Allocate unmanaged memory. 
    int elementSize = 1;
    IntPtr unmanagedArray = Marshal.AllocHGlobal(10 * elementSize);

    // Set the 10 elements of the C-style unmanagedArray
    for (int i = 0; i < 10; i++)
    {
        Marshal.WriteByte(unmanagedArray, i * elementSize, ((Byte)(i + 1)));
    }
    Console.WriteLine("Unmanaged memory written.");

    Console.WriteLine("Reading unmanaged memory:");
    // Print the 10 elements of the C-style unmanagedArray
    for (int i = 0; i < 10; i++)
    {
        Console.WriteLine(Marshal.ReadByte(unmanagedArray, i * elementSize));
    }

    Marshal.FreeHGlobal(unmanagedArray);

    Console.WriteLine("Done. Press Enter to continue.");
    Console.ReadLine();
}
Sub ReadWriteByte()
    ' Allocate unmanaged memory. 
    Dim elementSize As Integer = 1
    Dim unmanagedArray As IntPtr = Marshal.AllocHGlobal(10 * elementSize)

    ' Set the 10 elements of the C-style unmanagedArray
    For i As Integer = 0 To 9
        Marshal.WriteByte(unmanagedArray, i * elementSize, CType(i + 1, Byte))
    Next i
    Console.WriteLine("Unmanaged memory written.")

    Console.WriteLine("Reading unmanaged memory:")
    ' Print the 10 elements of the C-style unmanagedArray
    For i As Integer = 0 To 9
        Console.WriteLine(Marshal.ReadByte(unmanagedArray, i * elementSize))
    Next i

    Marshal.FreeHGlobal(unmanagedArray)

    Console.WriteLine("Done. Press Enter to continue.")
    Console.ReadLine()
End Sub

次の例では、ReadByte メソッドを使用してアンマネージ文字の値を読み取る方法を示します。


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



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

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

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

注釈

ReadByte を使用すると、アンマネージ C スタイルのバイト配列と直接やり取りできるため、要素値を読み取る前に (Marshal.Copyを使用して) アンマネージド配列全体を別のマネージド配列にコピーする手間が省けます。

アライメントされていないメモリ位置からの読み取りがサポートされています。

こちらもご覧ください

適用対象

ReadByte(Object, Int32)

ソース:
Marshal.CoreCLR.cs
ソース:
Marshal.CoreCLR.cs
ソース:
Marshal.CoreCLR.cs

注意事項

ReadByte(Object, Int32) may be unavailable in future releases.

アンマネージ メモリから、指定されたオフセット (またはインデックス) で 1 バイトを読み取ります。

public:
 static System::Byte ReadByte(System::Object ^ ptr, int ofs);
[System.Obsolete("ReadByte(Object, Int32) may be unavailable in future releases.")]
[System.Security.SecurityCritical]
public static byte ReadByte (object ptr, int ofs);
[System.Obsolete("ReadByte(Object, Int32) may be unavailable in future releases.")]
public static byte ReadByte (object ptr, int ofs);
public static byte ReadByte (object ptr, int ofs);
[System.Security.SecurityCritical]
public static byte ReadByte (object ptr, int ofs);
[<System.Obsolete("ReadByte(Object, Int32) may be unavailable in future releases.")>]
[<System.Security.SecurityCritical>]
static member ReadByte : obj * int -> byte
[<System.Obsolete("ReadByte(Object, Int32) may be unavailable in future releases.")>]
static member ReadByte : obj * int -> byte
static member ReadByte : obj * int -> byte
[<System.Security.SecurityCritical>]
static member ReadByte : obj * int -> byte
Public Shared Function ReadByte (ptr As Object, ofs As Integer) As Byte

パラメーター

ptr
Object

ソース オブジェクトのアンマネージ メモリ内のベース アドレス。

ofs
Int32

読み取る前に ptr パラメーターに追加されるバイト オフセット。

戻り値

指定されたオフセットにあるアンマネージ メモリから読み取られたバイト。

属性

例外

ベース アドレス (ptr) とオフセット バイト (ofs) は、null または無効なアドレスを生成します。

ptrArrayWithOffset オブジェクトです。 このメソッドは、ArrayWithOffset パラメーターを受け取りません。

注釈

ReadByte を使用すると、アンマネージ C スタイルのバイト配列と直接やり取りできるため、要素値を読み取る前に (Marshal.Copyを使用して) アンマネージド配列全体を別のマネージド配列にコピーする手間が省けます。

アライメントされていないメモリ位置からの読み取りがサポートされています。

こちらもご覧ください

適用対象

ReadByte(IntPtr)

ソース:
Marshal.cs
ソース:
Marshal.cs
ソース:
Marshal.cs

アンマネージ メモリから 1 バイトを読み取ります。

public:
 static System::Byte ReadByte(IntPtr ptr);
[System.Security.SecurityCritical]
public static byte ReadByte (IntPtr ptr);
public static byte ReadByte (IntPtr ptr);
[<System.Security.SecurityCritical>]
static member ReadByte : nativeint -> byte
static member ReadByte : nativeint -> byte
Public Shared Function ReadByte (ptr As IntPtr) As Byte

パラメーター

ptr
IntPtr

nativeint

読み取り元のアンマネージ メモリ内のアドレス。

戻り値

アンマネージ メモリから読み取られたバイト。

属性

例外

ptr は認識されない形式です。

-又は-

ptrnullです。

-又は-

ptr が無効です。

次の例では、アンマネージ メモリのブロックを作成し、アンマネージ メモリにバイトを書き込み、アンマネージ メモリからバイトを読み取り、アンマネージ メモリを破棄します。

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.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

次の例では、ReadByte メソッドを使用してアンマネージ文字の値を読み取る方法を示します。


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);
}

注釈

ReadByte の暗黙のオフセットは 0 です。 このメソッドを使用すると、アンマネージ C スタイルのバイト配列を直接操作できるため、要素値を読み取る前にアンマネージド配列全体 (Marshal.Copyを使用) を別のマネージド配列にコピーする手間が省けます。

アライメントされていないメモリ位置からの読み取りがサポートされています。

こちらもご覧ください

適用対象