Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从文本框复制到结构C#_C#_.net_Struct - Fatal编程技术网

如何从文本框复制到结构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);}