1

如果Textbox1.text包含一个字符串值ZU4,我如何将该字符串转换为它的数字 ASCII 代码,并将其输出到第二个文本框?

我想使用FOR LOOP条件语句来执行此操作,该语句将读取 INPUT 中的每个字符?

样本:

INPUT  Textbox1.Text = ZU4
OUTPUT Textbox2.Text = 908552
4

5 回答 5

1

你也可以使用 LINQ:

TextBox2.Text = String.Join(String.Empty, From c In Textbox1.Text.ToCharArray Select (Asc(c).ToString))

可能对一些工作面试有用...... :)

于 2012-12-29T15:30:08.800 回答
0

这是 C# 中的一种方法:

Textbox2.Text = string.Empty;
foreach(var c in Textbox1.Text)
{
  Textbox2.Text += ((int)c).ToString();
}

VB.NET:

Textbox2.Text = String.Empty
For Each c As Char In Textbox1.Text
  Textbox2.Text = Textbox2.Text + Convert.ToInt32(c).ToString()
Next

它:

  • 清除Textbox2.Text
  • 循环输入中的每个字符
  • 将整数值输出作为字符串连接到输出文本
于 2012-12-29T15:07:50.077 回答
0
TextBox2.Text = ""
For i As Integer = 0 To TextBox1.TextLength - 1
    TextBox2.Text += Asc(TextBox1.Text(i)).ToString()
Next
于 2012-12-29T15:11:20.213 回答
0

我修改了这个链接的代码

Function AsciiEncode(ByVal value As String) As String
            Dim encValue As New System.Text.StringBuilder(value.Length * 6)
            Dim c As Char
            For Each c In value
                encValue.Append(Convert.ToInt32(c))
            Next
            Return encValue.ToString()
End Function

用法:

   Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
        TextBox2.Text = AsciiEncode(TextBox1.Text)
    End Sub
于 2012-12-29T15:11:36.750 回答
0

所有其他答案都适用于您给定的示例,但是,一些建议使用 unicode 编码而不是 ASCII。如果严格遵守 ASCII 编码很重要,那么您应该明确指定要使用的编码。

Convert.ToInt32使用 UTF-16 编码。我不确定CInt会做什么,但我怀疑它的工作方式相同。使用Asc更好,但它仍然依赖于线程的代码页设置,所以它仍然不是完全安全的。除此之外,Asc是 VB.NET 中提供的一个旧的 VB6 函数,主要是为了向后兼容。

因此,我建议改用ASCIIEncoding该类。您可以使用命名空间中类的共享ASCII属性获取Encoding该类的System.Text实例,例如:

Public Function ConvertTextToAsciiDigits(text As String) As String
    Dim builder As New StringBuilder()
    For Each b As Byte In Encoding.ASCII.GetBytes(text)
        builder.Append(b.ToString())
    Next
    Return builder.ToString()
End Function

然后,您可以像这样调用该函数:

Textbox2.Text = ConvertTextToAsciiDigits(Textbox1.Text)

但是,我无法想象生成的字符串将可用,除非每个字符都产生一个两位数。因此,我会通过执行以下操作将其强制为两位数:

Public Function ConvertTextToAsciiDigits(text As String) As String
    Dim builder As New StringBuilder()
    For Each b As Byte In Encoding.ASCII.GetBytes(text)
        If b > 99 then
            Throw New FormatException()  ' Throws an exception if the value is three digits
        End If
        builder.Append(b.ToString("00"))  ' Adds a leading zero to one-digit values
    Next
    Return builder.ToString()
End Function

要在每第四个数字后添加一个连字符,正如您在下面的评论中提到的,您可以跟踪自最后一个连字符以来添加的总数字,如下所示:

Public Function ConvertTextToAsciiDigits(text As String) As String
    Dim builder As New StringBuilder()
    Dim digitsSinceHyphen As Integer = 0
    For Each b As Byte In Encoding.ASCII.GetBytes(text)
        If b > 99 then
            Throw New FormatException()
        End If
        builder.Append(b.ToString("00"))
        digitsSinceHyphen += 2
        If digitsSinceHyphen >= 4 Then
            builder.Append("-")
            digitsSinceHyphen = 0
        End If
    Next
    Return builder.ToString()
End Function
于 2012-12-29T19:11:23.847 回答