C#解析char型指針?biāo)赶虻膬?nèi)容(實例解析)
指針的概念
指針是一個特殊的變量,它里面存儲的數(shù)值被解釋成為內(nèi)存里的一個地址。要搞清一個指針需要搞清指針的四方面的內(nèi)容:指針的類型,指針?biāo)赶虻念愋停羔樀闹祷蛘呓兄羔標(biāo)赶虻膬?nèi)存區(qū),還有指針本身所占據(jù)的內(nèi)存區(qū)。讓我們分別說明。
先聲明幾個指針放著做例子:
例一:
int *ptr;
char *ptr;
int **ptr;
int (*ptr)[3];
int *(*ptr)[4];
正文
1、背景
在c++代碼中定義了一個功能函數(shù),這個功能函數(shù)會將計算的結(jié)果寫入一個字符串型的數(shù)組中output,然后c#會調(diào)用c++導(dǎo)出的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)是因為內(nèi)存編碼是UTF8,Marshal不支持UTF轉(zhuǎn)換,所以必須先轉(zhuǎn)成Unicode再轉(zhuǎn)成UTF8。
到此這篇關(guān)于C#解析char型指針?biāo)赶虻膬?nèi)容的文章就介紹到這了,更多相關(guān)C# char指針內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# TextBox控件實現(xiàn)只能輸入數(shù)字的方法
這篇文章主要介紹了C# TextBox控件實現(xiàn)只能輸入數(shù)字的方法,本文使用TextBox的keypress事件實現(xiàn)這個需求,需要的朋友可以參考下2015-06-06
DevExpress中GridControl列轉(zhuǎn)義的實現(xiàn)方法
這篇文章主要介紹了DevExpress中GridControl列轉(zhuǎn)義的實現(xiàn)方法,在項目開發(fā)中有一定的實用價值,需要的朋友可以參考下2014-08-08
C#判斷當(dāng)前程序是否通過管理員運(yùn)行的方法
這篇文章主要介紹了C#判斷當(dāng)前程序是否通過管理員運(yùn)行的方法,可通過非常簡單的系統(tǒng)函數(shù)調(diào)用實現(xiàn)對當(dāng)前程序是否通過管理員運(yùn)行進(jìn)行判定,是非常實用的技巧,需要的朋友可以參考下2014-11-11
Unity UGUI的InputField輸入框組件使用詳解
這篇文章主要為大家介紹了Unity UGUI的InputField輸入框組件使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07

