我在C#程序中要使用到用C++编写的dll文件(就叫它aaa.dll),我从aaa中返回了一个string的值,在C#中使用,但是,发现C#中的string和C++中的string类型不一样,导致使用的时候乱码,怎么解决这个问题,最好将其改成C#的string类型?在线等,谢谢,我会根据情况多加分的,求求了!!!
C++里面的string相当于C#里面的stringbuilder,本质上是个char[]。string通过函数c_str可以转换为 char[]类型。
语法:
const char *c_str();
c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同.
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
C#中char[]与string之间的转换:
string 转换成 Char[]
string ss = "abcdefg";
char[] cc = ss.ToCharArray();
Char[] 转换成string
string s = new string(cc);
此外,byte[] 与 string 之间的装换
byte[] bb = Encoding.UTF8.GetBytes(ss);
string s = Encoding.UTF8.GetString(bb);
下面我们利用 StringBuilder 来进行数组 与 string 间的转换 , 很简单,代码如下
using System.Text;
StringBuilder sb = new StringBuilder();
foreach(char c in cc)
{
sb.Append(c);
}
string s = sb.ToString();
StringBuilder 的 Append 方法支持多种参数,所以数组转换成string基本上都可以用它。
另外 string[] 转换成string,.Net框架提供了一个使用的方法
string strOr = "OR";
string result = string.Concat(new string[]{" A ",strOr," B ",Environment.NewLine," C ",strOr," D "});
在C#里面采用MemoryStream接收该byte[]数组, 再用根据文字编码, 使用StreamReader将MemoryStream的内容读出即可.本回答被提问者和网友采纳
在C#里面采用MemoryStream接收该byte[]数组, 再用根据文字编码, 使用StreamReader将MemoryStream的内容读出即可,这个答案很标准
不是 string类型不一样,而是,没有选择好string的编码