如何从文本框复制到结构C#
我需要将字符串从文本框复制到结构。有什么办法吗?以下是我所尝试的:如何从文本框复制到结构C#,c#,.net,struct,C#,.net,Struct,我需要将字符串从文本框复制到结构。有什么办法吗?以下是我所尝试的: 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_
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字符(char),则需要使用。如果需要unicode字符(WCHAR)那么你应该使用。我建议你分享这个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
}
这里,我们是说我们将显式地布局结构(使用字段偏移)然后为每个字段提供信息。此结构可能与您想要的相同。或者您必须根据需要使用这些属性。您将在何处使用此结构-我相信会调用某些Win32样式的API。因此,正确的实现将取决于该API所寻找的内容。请检查例如,如果它需要ASCII字符(char),则需要使用。如果它需要unicode字符(WCHAR),则应使用。我建议您共享该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
}
这里,我们是说我们将显式地布局结构(使用字段偏移)然后为每个字段提供信息。此结构可能与您想要的结构相同。或者您必须根据自己的要求使用这些属性。为什么要使用
不安全的关键字?还有,您还想做什么?在我的程序中使用封送处理。您从te获得了什么输出xtbox?为什么要使用不安全的关键字?还有,你想做什么,你还没有做?我正在我的程序中使用封送。你从文本框中得到什么输出?不…我需要将一些设置写入相机的NV-RAM(非易失性)。在UI文本框中输入的详细信息存储在结构中,然后将其转换为字节[],传递到WriteePROM()…@ajith,无论您在哪里写入此数据,它都应该是某种格式的-对吗?(与只读取/写入数据的程序相反)。所以,该格式必须指定install_name的含义以及这些原始字节中的预期内容?@vinay:我无法理解您…无论您在文本框中输入什么,请将其转换为字节数组并写入,然后将其读回并保存display@ajith,您必须使用某些非托管API(dll调用)要写入EPROM-对吗?您是如何决定mystruc有3个固定长度的字节数组的?请参阅我的回答中的编辑。public int WriteEEPROM(int Adr,byte[]pcString,int count){return uEyeCamera.WriteEEPROM(Adr,pcString,count);}否…我需要将一些设置写入NV-RAM(非易失性)在UI文本框中输入的详细信息存储在struct中,然后将其转换为字节[],传递到WriteePROM()…@ajith,无论您在何处写入此数据,它都应采用某种格式-对吗?(与仅读取/写入数据的程序相反)。所以,该格式必须指定install_name的含义以及这些原始字节中的预期内容?@vinay:我无法理解您…无论您在文本框中输入什么,请将其转换为字节数组并写入,然后将其读回并保存display@ajith,您必须使用某些非托管API(dll调用)要写入EPROM-对吗?您是如何决定mystruc有3个固定长度的字节数组的?请参阅我在回答中的编辑。public int WriteEEPROM(int Adr,byte[]pcString,int count){return uEyeCamera.WriteEEPROM(Adr,pcString,count);}