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

时间:2015-01-30 10:46:16

标签: 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.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst = 64)]
        public string serialNumber;  
      }                  

这次我不能使用结构,因为这个新函数将serialNumber作为其参数之一。我已经将serialNumber声明为一个字符串,然后当调用导入的c函数程序崩溃时,我认为这个数据冲突的原因是什么?

很抱歉,如果这个问题有点令人困惑,我会尽力解释我的问题,任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

你需要像这样使用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 );