[英]Chr from VB6 translated to C#
我正在將一些硬件通信代碼從VB6轉換為C#,但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
字符串中的STARTQUEST
看起來有很大不同。 還有什么其他方法可以讓vb6函數在C#中執行相同的操作?
一種選擇是添加對Microsoft.VisualBasic的引用並使用Strings.Chr函數
Chr在幕后所做的事情比您想像的要多得多(請參閱鏈接)。
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 }
);
使用(Char)強制轉換可獲取VB6的ChrW(而非Chr)功能的行為。 VB6的Chr函數執行ANSI <-> Unicode轉換-若要在C#中復制此代碼,可以使用System.Text.Encoding.Default.GetBytes()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.