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

标签 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函数时程序崩溃,我认为这是数据冲突的原因?

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

最佳答案

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

关于c# - 将 ASCII 字符数组转换为 UNICODE 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28234173/

相关文章:

c# - 按钮和 ListView

c# - 我应该如何使用手动 DAL 处理复合实体的创建?

c# - 清空图像实例

c++ - gcc - 将多个 c 文件链接到一个 c++ 文件

c++ - Qt-GUI有几个 "pages",如何同步几个QWidgets的大小

c# - AnonymousPipeServerStream.Read() 偶尔会在客户端退出时挂起

c - waitpid() 的参数

c - 关于结构体的动态分配数组并在函数之间发送它

java - 我该怎么做才能让我的 Madlibs 程序从此登录/密码程序访问?

c# - 如何在 Visual C# 中重置轨迹栏?