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
)并在之后执行长度检查并单独处理您在循环中错过的最后一个字符。
我目前正在开发一个将字符串转换为 "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
)并在之后执行长度检查并单独处理您在循环中错过的最后一个字符。