【问题标题】:Reverse byte array in VB6VB6中的反向字节数组
【发布时间】:2014-12-06 15:25:38
【问题描述】:

在普通的旧 VB6 中,以下 .NET 代码的等价物是什么?

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

【问题讨论】:

  • 没有。您需要手动对其进行编码。 (标准方法是循环最多 1/2 的数组并进行适当的交换)。

标签: arrays vb6 reverse


【解决方案1】:

您可以使用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
    

    但总的来说,“硬”方法更安全。

    【讨论】:

      【解决方案3】:

      其他答案对我很有帮助,但我发现我的数组是使用自定义拆分例程构建的,该例程返回一个基于 1 的数组。因此,数组是基于 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
      

      【讨论】:

      • 不用传入base,只需使用传入数组的LBound即可。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      相关资源
      最近更新 更多