因此。我使用ASCII值(数字)并将它们转换为ASCII字符(字母和符号)。我设法提出了一些东西,但在使用For Each时...接下来,它将每个数字分开。例如,如果我输入82(对应于R),我会得到对应于8的任何内容以及对应于2的任何内容。是否有人指出如果数字之间没有空格,那么它是一个单号?或者只是一种方式来读取数字,而不是单个数字。
这是一些代码。我不应该使用Char数据类型吗?正如我所假设的那样,它一次转换1位数。虽然当我尝试任何其他数据类型时,我收到一些关于它不是集合类型的错误。
Dim rtb As String
rtb = Rich.Text1
For Each num As Char In rtb
'Conversion stuff goes here
Next num
答案 0 :(得分:1)
让我们分析一下这里发生的事情:
For Each num As Char In rtb
由于rtb
是String
,而String
实现IEnumerable<Char>
,上面基本上就是说 - 对于字符串中的每个字符 - 这不是你想要的
您需要先将字符串拆分为各自代表数字的组 - 例如:
Dim numbers As String() = rtb.Split(" ")
然后,您可以迭代列表并将每个字符串(这些仍然是字符串)转换为实际数字,您需要将其转换为字符:
For Each num As String In numbers
' num can be "82", for instance
Next num
答案 1 :(得分:0)
做这样的事情:
Dim rtb As String = Nothing
rtb = "82 40 30"
For Each num As var In rtb.Split(" "C)
Next
当然,如果您想使用其他字符拆分数字,只需将“C”替换为您需要的
答案 2 :(得分:0)
你不是在迭代数字,而是在迭代单个字符。您没有告诉我们输入中的数字是如何分开的,但为了便于讨论,我们假设您使用的是空格。我们可以使用String.Split
从流中获取单个数字:
Dim rtb As String = "82 23 47 123"
Dim Ascii = System.Text.Encoding.ASCII
For each numToken As String In rtb.Split(" "c)
Dim num As Byte
If Not Byte.TryParse(numToken, num)
' Signal error
Exit For
End If
Dim buffer As Char() = Ascii.GetChars(New Byte() { num })
Dim result As Char = buffer(0)
' Do something with `result`
Next
重要一点:我使用System.Text.Encoding
类来进行ASCII码和字符之间的映射。这似乎不必要地复杂,但想要这样做。令人遗憾的是,编码 非常复杂,否则使用本土的ad-hoc转换会产生相反的效果。特别是,使用Chr
不是合适的,因为它实际上不处理ASCII,它处理类似但不相同的Unicode代码点(有一些限制)。在上面的代码中使用Chr
会产生误导,从而成为一种可靠的方法,可以在未来的路上引入错误。记录您的假设很重要,如果您的假设是输入由ASCII组成,那么转换代码应该反映出来。
答案 3 :(得分:0)
每个字符使用三位数字。大多数小写字母无论如何都是三位数。