C#命名管道中,有关于转换的部分,最多的疑问来自于int型数组和字符数组的转换。我们这里进行的提问与回答,应该能解释这一问题。
C#命名管道中转换int型数组和字符数组的提问
命名管道中要把一个数据写入管道,那么需要调用下面的API函数,如下:
- [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]
所有的数据必须转换为字符数组的形式:byte[] lpBuffer, 如果是简单的基本类型,如int型,可以通过System.BitConverter.GetBytes(intdata),将int型数组转换为byte[], 读取数据时反过来通过System.BitConverter.ToInt32(bytes,0)将字符数组转换为int型。.net库函数提供了将基本类型数据
转换为字符数组的函数,但是没有提供转换复杂类型的函数。
所以,如果传递的是其他非基本类型数据,如int型数组,该如何转换呢?
C#命名管道中转换int型数组和字符数组的回答
直接把数组序列化为Byte[]就可。
- BinaryFormatter formatter = new BinaryFormatter();
- MemoryStream memStream = new MemoryStream();
- formatter.Serialize(memStream, array);
- memStream.Position = 0;
- byte[] b=memStream.GetBuffer();
- memStream.Close();
在C++中能够将int型数组转化为字节数组吗?
这个肯定可以,问题是转换后能不能在C#中用BinaryFormatter反序列化。
其实就是在C++中能不能模拟出BinaryFormatter的序列化的功能,可以研究BinaryFormatter的代码,或者序序列化后的Byte数组结构。
【编辑推荐】