C#解析char型指針所指向的內容(實例解析)
指針的概念
指針是一個特殊的變量,它里面存儲的數(shù)值被解釋成為內存里的一個地址。要搞清一個指針需要搞清指針的四方面的內容:指針的類型,指針所指向的類型,指針的值或者叫指針所指向的內存區(qū),還有指針本身所占據(jù)的內存區(qū)。讓我們分別說明。
先聲明幾個指針放著做例子:
例一:
int *ptr;
char *ptr;
int **ptr;
int (*ptr)[3];
int *(*ptr)[4];
正文
1、背景
在c++代碼中定義了一個功能函數(shù),這個功能函數(shù)會將計算的結果寫入一個字符串型的數(shù)組中output
,然后c#會調用c++導出的dll中的接口函數(shù),然后獲取這個output
并解析成string類型。
2、實例
c++:
CPPDLL_API int Function( char*& output)
c#:
[DllImport(@"Project1.dll", EntryPoint = "Function",CharSet = CharSet.Auto)] public static extern int Function(ref IntPtr output); IntPtr ptr = IntPtr.Zero; int isok = Function(ref ptr); // -> Unicode byte[] bytes = System.Text.Encoding.Unicode.GetBytes(Marshal.PtrToStringUni(ptr)); // -> UTF8 string dec = System.Text.Encoding.UTF8.GetString(bytes);
錯誤代碼:
string dec = Marshal.PtrToStringAnsi(ptr);
得到的dec是亂碼,查詢發(fā)現(xiàn)是因為內存編碼是UTF8,Marshal不支持UTF轉換,所以必須先轉成Unicode再轉成UTF8。
到此這篇關于C#解析char型指針所指向的內容的文章就介紹到這了,更多相關C# char指針內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C#中把任意類型的泛型集合轉換成SQLXML數(shù)據(jù)格式的實例
本文主要分享了C#中把任意類型的泛型集合轉換成SQLXML數(shù)據(jù)格式的實例代碼。具有很好的參考價值,需要的朋友可以看下2016-12-12