C# 如何在结构体里定义一个已知大小的数组?急急!!

如题,或者定义一个未知大小的数组?再请问一下前辈,怎样将一个已有的数组拷贝到结构体中?如下:structTest{bytea;byteb;byte[]c;}Testst;... 如题,或者定义一个未知大小的数组?
再请问一下前辈,怎样将一个已有的数组拷贝到结构体中?如下:
struct Test
{
byte a;
byte b;
byte [ ] c;
}
Test st;
st.c=new byte[50];
byte buf [ 100 ] ;
for(int i=0; i<100; i++)
{
buf [ i ] = i ;
}
// 在这里写代码将buf 里的数组拷贝到st里,
// 如果能实现的话,效果应该如下:
// buf 里的数据是:buf [0]=0、buf [1]=1、buf [2]=2、buf [3]=3、buf [4]=4 、……
// 在拷贝数据之后,结构本st里的成员数据应该如下:
// st.a=0;
// st.b=1;
// st.c[0]=2 、 st.c[1]=3 、 st.c[2]=4 、 st.c[3]=5 、 st.c[4]=6、 st.c[5]=7 、……

请问前辈们,这要怎样写才能做到?请高手们帮帮,小弟觉得这是个技术高深的问题,小弟不懂,望前辈们帮帮忙!!
展开
 我来答
aaasuper
2012-03-16 · TA获得超过801个赞
知道小有建树答主
回答量:431
采纳率:100%
帮助的人:624万
展开全部
定义固定大小的结构体
[StructLayout(LayoutKind.Sequential,Size=14,CharSet= CharSet.Ansi,Pack=1)]
struct SerialPackage
{
public UInt32 voltage;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public byte[] datas;
}
前面[]指定了结构体的布局方式和大小,中间部分的[]指定了数组的封送方法和长度

在结构体和数组直接复制数据使用System.Runtime.InteropServices.Marshal.Copy()方法和Marshal.PtrToStructure()方法,中间必须经过一个中转
byte[] datas=new byte[m_iPackSize];
IntPtr structPtr = Marshal.AllocHGlobal(m_iPackSize);
Marshal.Copy(datas,0,structPtr,m_iPackSize);
m_sPackage=(SerialPackage)Marshal.PtrToStructure(structPtr,typeof(SerialPackage));
Marshal.FreeHGlobal(structPtr);
NotigerKuiKui
推荐于2017-12-16 · TA获得超过2802个赞
知道大有可为答主
回答量:1592
采纳率:76%
帮助的人:460万
展开全部
public struct Book
{
public int[] i;
//或者在构造函数里初始化数组,结构体支持构造函数
}
BooK book1;
book1.i =new int[10];
book1.i[0]=10;
更多追问追答
追问
那怎么获取结构体的长度呢?比如你说的结构体变量 book1的长度,因为里面有一个未知的数组,在对数组实例化前后对比下,结构体的内存长度是否会变化?
追答
长度肯定是变化的,因为c#中的struct和C中的是不一样的,c#中struct是一个对象,结构名是一个相当于指针的东西,你没法判断struct的长度,C的struct是静态的,所有的成员都是确定的,
你为什么要取struct长度,这个看似简单问题其实不简单.....因为包含了不定的数组在里面,要实现你那个copy自己写个方法就是了
public struct stuTest
{
public byte a;
public byte b;
public byte[] c;
}
public stuTest copyByteArray(byte[] byte1)
{
stuTest mystuTest = new stuTest();
int ii = 2;
mystuTest.a = byte1[0];
mystuTest.b = byte1[1];

int jj = byte1.Length - ii;

if (jj > 0)
{
mystuTest.c = new byte[jj];
for (int i = 0; i < jj; i++)
{
mystuTest.c[i] = byte1[i + ii];
}
}
return mystuTest;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
NA009
2012-03-15 · TA获得超过579个赞
知道小有建树答主
回答量:331
采纳率:0%
帮助的人:268万
展开全部
struct structName
{
Array[] arr;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
suto_zhang
2012-03-15
知道答主
回答量:18
采纳率:0%
帮助的人:5.5万
展开全部
typedef struct
{
uint32_t array_name[];
} struct_name;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式