如何从文本框复制到结构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);
}
和其他方式。它不工作.. :(任何帮助极大赞赏
你要在哪里使用这个结构 - 我相信要调用一些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
}
在这里,我们说,我们将明确地布局结构(使用场偏移),然后为每个字段提供的信息。这个结构可能与你想要的相同。或者你必须按照你的要求玩这些属性。
没有...我需要写一些设置到NV-RAM(非易失性)的摄像头..在UI文本框中输入的细节存储在结构中,然后将其转换为字节[],传递给writeEEPROM()... – 2010-10-29 10:07:07
@ajith,无论你在写什么数据,它都会以某种格式出现 - 对吧? (而不是只有你的程序将读取/写入数据)。那么这种格式必须指定install_name的含义以及这些原始字节中的预期内容? – VinayC 2010-10-29 13:07:51
@vinay:我知道你...无论你在文本框中输入,将它转换为字节数组并写入,然后读回并显示 – 2010-10-30 02:55:12
你为什么使用'unsafe'关键字?另外,你还想要什么,你还没有做过? – 2010-10-29 08:01:34
上午在我的编程中使用元帅.. – 2010-10-29 08:05:15
你从文本框得到什么输出? – kyndigs 2010-10-29 08:58:06