C#解析char型指針?biāo)赶虻膬?nèi)容(實(shí)例解析)
指針的概念
指針是一個(gè)特殊的變量,它里面存儲(chǔ)的數(shù)值被解釋成為內(nèi)存里的一個(gè)地址。要搞清一個(gè)指針需要搞清指針的四方面的內(nèi)容:指針的類(lèi)型,指針?biāo)赶虻念?lèi)型,指針的值或者叫指針?biāo)赶虻膬?nèi)存區(qū),還有指針本身所占據(jù)的內(nèi)存區(qū)。讓我們分別說(shuō)明。
先聲明幾個(gè)指針?lè)胖隼樱?/p>
例一:
int *ptr;
char *ptr;
int **ptr;
int (*ptr)[3];
int *(*ptr)[4];
正文
1、背景
在c++代碼中定義了一個(gè)功能函數(shù),這個(gè)功能函數(shù)會(huì)將計(jì)算的結(jié)果寫(xiě)入一個(gè)字符串型的數(shù)組中output
,然后c#會(huì)調(diào)用c++導(dǎo)出的dll中的接口函數(shù),然后獲取這個(gè)output
并解析成string類(lèi)型。
2、實(shí)例
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);
錯(cuò)誤代碼:
string dec = Marshal.PtrToStringAnsi(ptr);
得到的dec是亂碼,查詢(xún)發(fā)現(xiàn)是因?yà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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#中把任意類(lèi)型的泛型集合轉(zhuǎn)換成SQLXML數(shù)據(jù)格式的實(shí)例
本文主要分享了C#中把任意類(lèi)型的泛型集合轉(zhuǎn)換成SQLXML數(shù)據(jù)格式的實(shí)例代碼。具有很好的參考價(jià)值,需要的朋友可以看下2016-12-12C#調(diào)用百度翻譯API實(shí)現(xiàn)一個(gè)翻譯功能
一直喜歡用Google Translate API進(jìn)行在線(xiàn)翻譯,但是服務(wù)越來(lái)越慢這篇文章,所以只能換一個(gè)了,主要給大家介紹了關(guān)于C#調(diào)用百度翻譯API實(shí)現(xiàn)一個(gè)翻譯功能的相關(guān)資料,需要的朋友可以參考下2021-06-06C#使用Json.Net對(duì)JSON與對(duì)象的序列化與反序列化
這篇文章介紹了Json.Net對(duì)JSON與對(duì)象的序列化與反序列化,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05C#獲取系統(tǒng)當(dāng)前IE版本號(hào)
這篇文章主要為大家詳細(xì)介紹了C#獲取系統(tǒng)當(dāng)前IE版本號(hào),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12