C# 将ASCII字符数组转换为UNICODE字符串

C# 将ASCII字符数组转换为UNICODE字符串,c#,c,user-interface,unicode,ascii,C#,C,User Interface,Unicode,Ascii,我在c中调用一个c dll函数,该函数返回一个64位ASCII字符数组,因为c使用UNICODE。如何将ASCII字符数组转换为UNICODE字符串 我以前是通过在结构中包含字符串来实现这一点的,因为函数有一个结构作为其参数之一,如下所示: public struct example { public uint ID; [System.Runtime.InteropServices.MarshalAsAttribute(System.R

我在c中调用一个c dll函数,该函数返回一个64位ASCII字符数组,因为c使用UNICODE。如何将ASCII字符数组转换为UNICODE字符串

我以前是通过在结构中包含字符串来实现这一点的,因为函数有一个结构作为其参数之一,如下所示:

      public struct example
      {
        public uint ID;  
        [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst = 64)]
        public string serialNumber;  
      }                  
这次我不能使用结构,因为这个新函数的参数之一是serialNumber。我已经将serialNumber声明为一个字符串,那么当调用导入的c函数时,程序崩溃了,我认为这是数据冲突的原因

抱歉,如果这个问题有点让人困惑,请尽我所能解释我的问题,如有任何帮助,我们将不胜感激

您需要像这样使用System.Runtime.InteropServices.CharSet.Ansi:

[StructLayout( LayoutKind.Sequential, CharSet = CharSet.Ansi )]
public struct example
{
    public uint ID;  
    [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst = 64)]
    public string serialNumber;  
}
您还可以将字符串声明为字节数组,然后使用以下命令进行转换:

myString = System.Text.Encoding.ASCII.GetString( byteArray );

Add System.Runtime.InteropServices.CharSet.Ansithat抛出一个错误,指出类型System.Runtime.InteropServices.CharSet中不存在Ansi on。对不起,我是编程新手。我应该在开始时添加它吗?