C#命名管道中轉(zhuǎn)換int型數(shù)組和字符數(shù)組的疑問
C#命名管道中,有關(guān)于轉(zhuǎn)換的部分,最多的疑問來自于int型數(shù)組和字符數(shù)組的轉(zhuǎn)換。我們這里進(jìn)行的提問與回答,應(yīng)該能解釋這一問題。
C#命名管道中轉(zhuǎn)換int型數(shù)組和字符數(shù)組的提問
命名管道中要把一個(gè)數(shù)據(jù)寫入管道,那么需要調(diào)用下面的API函數(shù),如下:
- [DllImport("kernel32.dll", SetLastError=true)]
- public static extern bool WriteFile(
- IntPtr hHandle, // handle to file
- byte[] lpBuffer,// data buffer
- uint nNumberOfBytesToWrite, // number of bytes to write
- byte[] lpNumberOfBytesWritten, // number of bytes written
- uint lpOverlapped // overlapped buffer
- );[/align]
所有的數(shù)據(jù)必須轉(zhuǎn)換為字符數(shù)組的形式:byte[] lpBuffer, 如果是簡(jiǎn)單的基本類型,如int型,可以通過System.BitConverter.GetBytes(intdata),將int型數(shù)組轉(zhuǎn)換為byte[], 讀取數(shù)據(jù)時(shí)反過來通過System.BitConverter.ToInt32(bytes,0)將字符數(shù)組轉(zhuǎn)換為int型。.net庫函數(shù)提供了將基本類型數(shù)據(jù)
轉(zhuǎn)換為字符數(shù)組的函數(shù),但是沒有提供轉(zhuǎn)換復(fù)雜類型的函數(shù)。
所以,如果傳遞的是其他非基本類型數(shù)據(jù),如int型數(shù)組,該如何轉(zhuǎn)換呢?
C#命名管道中轉(zhuǎn)換int型數(shù)組和字符數(shù)組的回答
直接把數(shù)組序列化為Byte[]就可。
- BinaryFormatter formatter = new BinaryFormatter();
- MemoryStream memStream = new MemoryStream();
- formatter.Serialize(memStream, array);
- memStream.Position = 0;
- byte[] b=memStream.GetBuffer();
- memStream.Close();
在C++中能夠?qū)nt型數(shù)組轉(zhuǎn)化為字節(jié)數(shù)組嗎?
這個(gè)肯定可以,問題是轉(zhuǎn)換后能不能在C#中用BinaryFormatter反序列化。
其實(shí)就是在C++中能不能模擬出BinaryFormatter的序列化的功能,可以研究BinaryFormatter的代碼,或者序序列化后的Byte數(shù)組結(jié)構(gòu)。
【編輯推薦】






