今天在帮C#开发人员调试自己一个VC++写的dll,里面有个结构体有个成员变量,需要传递宽字符串,之前针对这个dll用VC++写的测试程序都是通过调用MultiByteToWideChar()这个Windows API来转换得到宽字符串,但是在C#里貌似不能直接调用这个函数,在网上搜了下,大致有两种方法:
1 通过dllImport来Invoke MultiByteToWideChar()
2 加上\u什么的逐个字符转换
这两种方法好像都不太直接,我想了下,微软强大的.net库应该不会说连这个转换功能都没有吧,后来发现Encoding这个类真是太好用了,代码如下:
public static byte[] setByte2(string str, int len)
{
byte[] b = Encoding.Default.GetBytes(str);
byte[] unicodeBytes = Encoding.Convert(Encoding.Default, Encoding.Unicode, b);
byte[] s = new byte[len];
for (int i = 0; i < unicodeBytes.Length; i++)
{
s[i] = unicodeBytes[i];
}
for (int i = unicodeBytes.Length; i < len; i++)
{
s[i] = 0;
}
return s;
}
假如str这个参数用Windows默认的编码格式,
str = "我爱那啥"; 这里str应该是GB2312编码,算是多字节编码的一种,调用这个函数后得到的字节流就是str转换后得到的宽字符串。
有理解不当的地方欢迎拍砖。