VB 中的数组越界

Array go out of bounds in VB

我目前正在开发一个将字符串转换为 "combined integer" 的程序(即:从一个字符串中,一次将其拆分为两个字符,然后每组中的每个字符将被转换成ASCII码。然后,第一个字符乘以256(向左移动8位)并添加第二个字符。它不能eliminate/forget字符串中的任何字符

这是问题真正开始的时候:它抛出了 IndexOutOfRangeException

    Dim input As String = TextBox1.Text.PadLeft(1)
    Dim charArr As Char() = input.ToCharArray
    Dim intGroup As UShort
    Dim strout As String = ""

    For index = 0 To charArr.Length - 2 Step 2
        Dim i = index
        Dim a = charArr(i)
        Dim b = charArr(i + 1)

        intGroup = CByte(AscW(a)) * 256 + CByte(AscW(b))
        strout = strout + CStr(intGroup) + " "
    Next

    MsgBox(strout)

我的猜测是我修改了循环内的 index,即 'forbidden'。

任何可能的解决方案??

谢谢

For index = 0 To input.Length - 2 step 2

array 是从零开始的,所以如果 length = and,最后一个元素是 arr[n-1]。 对于仅处理赔率元素,最后一个元素是 arr[n-2].

我会做一些事情比如但是我不知道你想如何处理奇数长度的字符串:

For index = 0 To charArr.Length - 1 Step 2
    Dim a = charArr(index)
    Dim b = If(index=charArr.Length - 1, _
            <something to use for odd length strings>, _
             charArr(index + 1))

    intGroup = CByte(AscW(a)) * 256 + CByte(AscW(b))
    strout = strout + CStr(intGroup) + " "
Next

我不知道你想用什么,特别是如果你记住 .NET 字符串(不像 C 字符串)可以很好地包含一个 ascii 代码为 0 的字符,所以只需使用 0 可能会给您留下不明确的数据,具体取决于您如何使用 您正在构建的字符串。

但基本上,它归结为您需要对奇数长度的字符串进行一些特殊处理,并且对 for 循环参数的任何魔术操作都无法避免这一事实 - 您要么在循环中处理它们(如上所述)或使用更短的循环(.Length - 2)并在之后执行长度检查并单独处理您在循环中错过的最后一个字符。