我正在将一些硬件通信代码从VB6转换为C#,并且需要将chars发送到设备的som通信出现问题。 VB6代码如下所示:
Dim STARTQUEST As String
STARTQUEST = Chr(254) + Chr(address + 8) + Chr(address) + Chr(20) + Chr(128) + Chr(3)
我已经完成了这个C#代码
String m_startQuest = "";
m_startQuest = m_startQuest + (Char)254 + (Char)(address + 8) + (Char)address + (Char)20 + (Char)128 + (Char)3;
但我觉得我没有从他们那里获得相同的输出。至少调试STARTQUEST
字符串看起来有很多不同。有没有其他方法可以让vb6函数在C#中做同样的事情?
答案 0 :(得分:2)
一个选项是添加对Microsoft.VisualBasic的引用并使用Strings.Chr函数
Chr在幕后做的比你想象的要多得多(见链接)。
答案 1 :(得分:1)
m_startQuest += Encoding.ASCII.GetString(
new byte[] {254, address + 8, address, 28, 128, 3}
);
为什么是字节? .Net char
类型支持Unicode,可能大于255.因此使用字节更安全。
更新
VB6中的运行时错误
Dim s As String
s = Chr(1) + Chr(256)
Debug.Print s
结果是c#中的257。
(((char)1) + ((char)256))
结果是c#中的字符串。
(((char)1) + "" + ((char)256))
c#中的编译时间错误。
Encoding.ASCII.GetString(
new byte[] { 1, 256 }
);
答案 2 :(得分:0)
使用(Char)强制转换可以获得VB6的ChrW(非Chr)函数的行为。 VB6的Chr函数执行ANSI< - > Unicode转换 - 要在C#中复制它,您可以使用System.Text.Encoding.Default.GetBytes()。