2014-12-06 30 views
0

在普通的舊VB6中,下列.NET代碼的等效代碼是什麼?VB6中的反向字節數組

byte[] reversedContents = fileContents.Reverse().ToArray(); 
+0

沒有一個。你需要手工編寫代碼。 (標準方法是循環到1/2陣列並進行適當的交換)。 – Bathsheba 2014-12-06 15:31:12

回答

2

您可以用for

For i = 0 To UBound(a) \ 2 
    k = a(i) : a(i) = a(UBound(a) - i) : a(UBound(a) - i) = k 
Next i 
2

做到這一點。如果我們可以假設一個動態的字節數組和非DBCS區域設置,那麼這通常是快(以及一個班輪):

Bytes = StrConv(StrReverse(StrConv(Bytes, vbUnicode)), vbFromUnicode) 

即使不是更快,它也不會慢很多。但是,當數組較短時,它會更慢,因爲

時間比較測試平臺:

Option Explicit 

Private Sub Easy() 
    Dim Bytes() As Byte 
    Dim Iterate As Long 

    Bytes = StrConv("abcdefghijklmnopqrstuvwxyz", vbFromUnicode) 

    For Iterate = 1 To 100000 
     Bytes = StrConv(StrReverse(StrConv(Bytes, vbUnicode)), vbFromUnicode) 
    Next 
End Sub 

Private Sub Hard() 
    Dim Bytes() As Byte 
    Dim Iterate As Long 
    Dim I As Long 
    Dim B As Byte 

    Bytes = StrConv("abcdefghijklmnopqrstuvwxyz", vbFromUnicode) 

    For Iterate = 1 To 100000 
     For I = 0 To UBound(Bytes) \ 2 
      B = Bytes(I) 
      Bytes(I) = Bytes(UBound(Bytes) - I) 
      Bytes(UBound(Bytes) - I) = B 
     Next 
    Next 
End Sub 

Private Sub Main() 
    Easy 
    Hard 
End Sub 

但在一般的 「硬」 的方法是安全的。

0

其他答案對我很有幫助,但是我發現我的數組是使用返回基於1的數組的自定義Split例程來構建的。所以假設陣列是基於0的,對我來說並不適用。此例程可以反轉基於0或1的陣列。我意識到最初的問題是反轉字節數組,但同樣的邏輯將適用。

Private Sub Reverse(ByRef s() As String, Optional ByVal base As Integer = 0) 
    Dim i As Long 
    Dim sSwap As String 

    For i = base To (UBound(s) + base) \ 2 
     sSwap = s(i) 
     s(i) = s((UBound(s) + base) - i) 
     s((UBound(s) + base) - i) = sSwap 
    Next 
End Sub 
+0

只需使用傳入數組的'LBound',而不是傳入'base'。 – 2016-06-09 12:39:51