问题是这样的,做一个Socket程序,客户端用的C++,服务器端用C#,两边都定义了相同的结构体,问题如何把C#的结构体转换成byte[]发送到客户端,还有就是,如何把客户端发送过来的byte[]转换成一个结构体?希望有做过这方面程序的朋友给点提示!
解决方案 »
- wince 窗口重绘的问题
- C#
- 关于PDA的开发问题 寻求异常解释
- 请问~~~直接DataGirdView.DataSource=DataTable,如何指定设置DataGirdView的列类型(ColumnType)???~标题要长长长长长长长长长长长长长长
- c# 如何截获win+d键消息
- 服务器导出Excel
- C#中如何重载赋值运算符=?急。。。。。。
- 请教C# RSA加解密签名验签的 字符字节编码问题
- 在绑定的控件中对数据库中值进行修改时碰到的一个问题。
- 我想在.net制作安装程序中,加入一个注册表项,记录程序的安装路径,怎么办,谢谢
- 请问你们有没有关于C#语言设计程序界面的电子书籍和资料
- 求一自动适应屏幕大小而自动调整窗体内控件的位置大小的类?
那byte[]转换成struct如何做呢?
你可以尝试这样:public struct MyStruct
{
int i;
int j;
}unsafe byte[] SaveMyStruct(MyStruct* st)
{
int len = sizeof(MyStruct);
MessageBox.Show(len.ToString());
byte[] buf = new byte[len];
byte* p = (byte*)st;
for (int i=0; i<len; i++)
{
buf[i] = *p++;
}
return buf;
}private void button1_Click(object sender, System.EventArgs e)
{
MyStruct st = new MyStruct();
unsafe
{
byte[] buf = SaveMyStruct(&st);
MessageBox.Show(buf.Length.ToString());
}}
http://www.cnblogs.com/contlu/archive/2005/01/19/94178.html
'参考:http://blog.csdn.net/freehul/archive/2005/01/19/258787.aspx
'将Image对象和byte[]互相转换
Public Shared Function ReadObject()Function ReadObject(ByVal obj As Object) As Byte()
Dim ms As MemoryStream = New MemoryStream
Dim bf As BinaryFormatter = New BinaryFormatter
bf.Serialize(ms, obj)
ms.Close()
Return ms.ToArray()
End Function Public Shared Function GetObject()Function GetObject(ByVal bytes As Byte()) As Object
Dim ms As MemoryStream = New MemoryStream(bytes, 0, bytes.Length)
Dim bf As BinaryFormatter = New BinaryFormatter
Return bf.Deserialize(ms) End Function
http://community.csdn.net/Expert/topic/3466/3466293.xml?temp=.6052515可以“比较”完美得实现 struct <-> byte[] 的互相转换。
{
MyStruct st = new MyStruct();
byte* p = (byte*)st;
int len = sizeof(MyStruct);
for (int i=0; i<len; i++)
{
*p++ = buf[i];
}
return st;
}private void button1_Click(object sender, System.EventArgs e)
{
MyStruct st = new MyStruct();
unsafe
{
byte[] buf = SaveMyStruct(st);
...
st = ReadMyStruct(buf);
MessageBox.Show(st.i.ToString());
}}
参考,Structertoptr 和 ptrtoStructer函数
如果结构数据不是太多太复杂,
有个比较实际的办法,就是自己手动序列.
自己写几个解编函数,把结构中的基础数据转换为BYTE[]队列,再才传输就可以了.