如何从文本框复制到结构C#

问题描述:

我需要将字符串从文本框复制到结构。有没有办法做到这一点?这就是我想要的:如何从文本框复制到结构C#

public unsafe struct mystruc 
{ 
    public byte[] install_name; // size limit 32 bytes 
    public byte[] install_id; // size limit 4 bytes 
    public byte[] model_name; // size limit 4 bytes 
}; 

private void read_b_Click(object sender, EventArgs e) 
{ 
    mystruc mstruc1 = new mystruc(); 

    //copy from textbox to struct  
    mstruc.install_name = Encoding.UTF8.GetBytes(installation_name_tb.Text); 
    mstruc.install_id = Encoding.UTF8.GetBytes(installation_id_tb.Text); 
    mstruc.model_name = Encoding.UTF8.GetBytes(model_tb.Text);  
} 

和其他方式。它不工作.. :(任何帮助极大赞赏

+1

你为什么使用'unsafe'关键字?另外,你还想要什么,你还没有做过? – 2010-10-29 08:01:34

+0

上午在我的编程中使用元帅.. – 2010-10-29 08:05:15

+0

你从文本框得到什么输出? – kyndigs 2010-10-29 08:58:06

你要在哪里使用这个结构 - 我相信要调用一些Win32风格的API。因此,正确的实现将取决于该API正在寻找什么。例如,如果期望ASCII字符(字符),你需要使用ASCIIEncoding。如果期待Unicode字符(WCHAR)则u应该使用UnicodeEncoding。我劝你共享的API,以获得更多有用的答案。

编辑 :我不确定您是否调用任何非托管DLL,或者您如何决定您的结构布局,但以下信息可能会有用:

如果想法是编写结构的内容,假设它的长度为40个字节(三个内联数组为32,4和4个字节),那么它在.NET中不会“按原样”工作。这是因为,数组是引用类型(指向其他地方的内存指针),.NET可能会选择字段偏移量来排列字边界 - 所以解决方案是使用属性来标记该结构布局。例如,

[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ascii)] 
public struct mystruc 
{ 
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] 
    [FieldOffset(0x00)] 
    public byte[] install_name; // size limit 32 bytes 

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] 
    [FieldOffset(0x33)] 
    public byte[] install_id; // size limit 4 bytes 

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] 
    [FieldOffset(0x37)] 
    public byte[] model_name; // size limit 4 bytes 
} 

在这里,我们说,我们将明确地布局结构(使用场偏移),然后为每个字段提供的信息。这个结构可能与你想要的相同。或者你必须按照你的要求玩这些属性。

+0

没有...我需要写一些设置到NV-RAM(非易失性)的摄像头..在UI文本框中输入的细节存储在结构中,然后将其转换为字节[],传递给writeEEPROM()... – 2010-10-29 10:07:07

+0

@ajith,无论你在写什么数据,它都会以某种格式出现 - 对吧? (而不是只有你的程序将读取/写入数据)。那么这种格式必须指定install_name的含义以及这些原始字节中的预期内容? – VinayC 2010-10-29 13:07:51

+0

@vinay:我知道你...无论你在文本框中输入,将它转换为字节数组并写入,然后读回并显示 – 2010-10-30 02:55:12