Marshal.PtrToStringAnsi 方法

定义

分配托管 String,并向其复制所有或部分非托管 ANSI(适用于 Windows)或 UTF-8(适用于 Unix)字符串。

重载

PtrToStringAnsi(IntPtr)

将非托管 ANSI 或 UTF-8 字符串中第一个空字符之前的所有字符复制到托管 String,并将每个字符扩展为 UTF-16 字符。

PtrToStringAnsi(IntPtr, Int32)

分配托管 String,然后从非托管 ANSI 或 UTF-8 字符串向其复制指定数目的字符,并将每个字符扩展为 UTF-16 字符。

PtrToStringAnsi(IntPtr)

Source:
Marshal.cs
Source:
Marshal.cs
Source:
Marshal.cs

将非托管 ANSI 或 UTF-8 字符串中第一个空字符之前的所有字符复制到托管 String,并将每个字符扩展为 UTF-16 字符。

public:
 static System::String ^ PtrToStringAnsi(IntPtr ptr);
[System.Security.SecurityCritical]
public static string PtrToStringAnsi (IntPtr ptr);
public static string? PtrToStringAnsi (IntPtr ptr);
public static string PtrToStringAnsi (IntPtr ptr);
[<System.Security.SecurityCritical>]
static member PtrToStringAnsi : nativeint -> string
static member PtrToStringAnsi : nativeint -> string
Public Shared Function PtrToStringAnsi (ptr As IntPtr) As String

参数

ptr
IntPtr

nativeint

非托管字符串的第一个字符的地址。

返回

一个包含非托管字符串副本的托管字符串。 如果 ptrnull,则该方法返回一个 Null 字符串。

属性

示例

以下示例使用 PtrToStringAnsi 方法从非托管 char 数组创建托管字符串。

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

void main()
{
    // Create an unmanaged c string.
    const char * myString = "Hello managed world (from the unmanaged world)!";
    
    // Convert the c string to a managed String.
    String ^ myManagedString = Marshal::PtrToStringAnsi((IntPtr) (char *) myString);
    
    // Display the string to the console.
    Console::WriteLine(myManagedString);
}

注解

PtrToStringAnsi 对于自定义封送处理或在混合托管代码和非托管代码时很有用。 由于此方法创建非托管字符串内容的副本,因此必须根据需要释放原始字符串。 此方法提供 和 Marshal.StringToHGlobalAnsi 方法的Marshal.StringToCoTaskMemAnsi相反功能。

另请参阅

适用于

PtrToStringAnsi(IntPtr, Int32)

Source:
Marshal.cs
Source:
Marshal.cs
Source:
Marshal.cs

分配托管 String,然后从非托管 ANSI 或 UTF-8 字符串向其复制指定数目的字符,并将每个字符扩展为 UTF-16 字符。

public:
 static System::String ^ PtrToStringAnsi(IntPtr ptr, int len);
[System.Security.SecurityCritical]
public static string PtrToStringAnsi (IntPtr ptr, int len);
public static string PtrToStringAnsi (IntPtr ptr, int len);
[<System.Security.SecurityCritical>]
static member PtrToStringAnsi : nativeint * int -> string
static member PtrToStringAnsi : nativeint * int -> string
Public Shared Function PtrToStringAnsi (ptr As IntPtr, len As Integer) As String

参数

ptr
IntPtr

nativeint

非托管字符串的第一个字符的地址。

len
Int32

要复制的输入字符串的字节数。

返回

如果 ptr 参数的值不是 null;则为包含本机字符串副本的托管字符串;否则此,方法将返回 null

属性

例外

len 小于零。

示例

以下示例使用 PtrToStringAnsi 方法从非托管char 数组创建托管字符串。

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



void main()
{
    // Create an unmanaged c string.
    const char * myString = "Hello managed world (from the unmanaged world)!";

    // Convert the c string to a managed String.
    String ^ myManagedString = Marshal::PtrToStringAnsi((IntPtr) (char *) myString);

    // Display the string to the console.
    Console::WriteLine(myManagedString);
}

注解

PtrToStringAnsi 对于自定义封送处理或在混合托管代码和非托管代码时很有用。 由于此方法创建非托管字符串内容的副本,因此必须根据需要释放原始字符串。 此方法提供 和 Marshal.StringToHGlobalAnsi 方法的Marshal.StringToCoTaskMemAnsi相反功能。

另请参阅

适用于