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

convert ASCII character array to UNICODE string

我在 c# 中调用一个 c dll 函数,其中 returns 一个 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 );