从VB6转换为C#的Chr

时间:2013-11-26 13:41:52

标签: c# vb6 char chr

我正在将一些硬件通信代码从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#中做同样的事情?

3 个答案:

答案 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()。