簡體   English   中英

VB6中的Chr轉換為C#

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM