0

所以。我正在获取 ASCII 值(数字)并将它们转换为 ASCII 字符(字母和符号)。我已经设法想出了一些东西,但是当使用 For Each...Next 时,它分隔了每个单独的数字。例如,如果我输入 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
4

4 回答 4

1

让我们分析一下这里发生了什么:

For Each num As Char In rtb

因为rtb是 aStringStringimplements IEnumerable<Char>,所以上面的内容本质上是你在说 - 对于字符串中的每个字符 - 这不是你想要的。

您需要首先将字符串拆分为每个代表一个数字的组 - 例如:

Dim numbers As String() = rtb.Split(" ")

然后,您可以遍历列表并将每个字符串(这些仍然是字符串)转换为实际数字,您需要将其转换为字符:

For Each num As String In numbers
   ' num can be "82", for instance
Next num
于 2013-04-07T19:08:14.493 回答
0

做这样的事情:

Dim rtb As String = Nothing
rtb = "82 40 30"

For Each num As var In rtb.Split(" "C)
Next

当然,如果您想使用其他字符拆分数字,只需将 ""C 替换为您需要的

于 2013-04-07T19:08:56.420 回答
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 代码和字符之间的映射。这可能看起来不必要的复杂,但确实想要这样做。不幸的是,编码复杂的,并且假装不使用并使用本土的临时转换会适得其反。特别是, usingChr不合适的,因为它实际上并不处理 ASCII,它处理相似但不相同的 Unicode 代码点(有一些限制)。在上面的代码中使用Chr会产生误导,因此是在未来进一步引入错误的可靠方法。记录您的假设很重要,如果您的假设是输入由 ASCII 组成,那么转换代码应该反映这一点。

于 2013-04-07T19:09:34.007 回答
0

每个字符使用三个数字。无论如何,大多数小写字母都是三位数字。

于 2013-04-08T03:49:17.440 回答