在c#中如何把结构转换为字节数组? 急!(50分)

  • 主题发起人 主题发起人 rzxiaojun
  • 开始时间 开始时间
R

rzxiaojun

Unregistered / Unconfirmed
GUEST, unregistred user!
如题: 多谢!
 
什么结构呀,说清楚呀
 
你的问题可能要用不安全的C#代码来实现,我贴个例子给你,我也想知道有没有办法不用unsafe code来得到结构的字节数组。
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
struct Test
{
public int x, y;
}
class Program
{
unsafe static byte[] GetStructBytes(Test t)
{
int n = sizeof(Test);
byte* p = (byte *)&t;
byte[] r = new byte[n];
for (int i = 0;
i < n;
i++) r = p;
return r;
}
static void PrintByteArray(byte[] arr)
{
Console.Write("Bytes : ");
for (int i = 0;
i < arr.Length;
i++) Console.Write("{0:X} ", arr);
}
static void Main(string[] args)
{
Test t = new Test();
t.x = 0x11223344;
t.y = 0x22334455;
byte[] arr = GetStructBytes(t);
PrintByteArray(arr);
Console.ReadKey();
}
}
}
 
struct TestStruct
{
public int f1;
public int f2;
public char f3;
}

TestStruct ts1=new TestStruct();
ts1.f1=47;
ts1.f2=876;
ts1.f3='s';
int s=Marshal.SizeOf(ts1.GetType());
IntPtr p=Marshal.AllocHGlobal(s);
Marshal.StructureToPtr(ts1,p,true);

byte[] bs=new byte;

Marshal.Copy(p,bs,0,s);
Marshal.FreeHGlobal(p);
 
.net和java都比较烂。要是在delphi/c/asm里面,根本不要这么费劲
 
后退
顶部