【问题标题】:how to convert string to ASCII in .NET [closed]如何在.NET中将字符串转换为ASCII [关闭]
【发布时间】:2016-07-30 20:51:45
【问题描述】:

我正在尝试将字符串转换为 ASCII,并添加了一个转换为 ASCII 的按钮和 2 个文本框:

我应该得到什么的例子: 对于输入 text@gg.com 我需要得到:116 101 120 116 064 103 103 046 099 111 109 出于某种原因,我总是得到 78-74-40-67-67-2E-63-6F-6D

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ascii
{
  public partial class WebForm1 : System.Web.UI.Page
  {

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        foreach (char c in TextBox1.Text)
        {
             TextBox3.Text = Encoding.ASCII.GetString(new byte[] { });
        }
    }

    protected void TextBox3_TextChanged(object sender, EventArgs e)
    {
    }

  }
}

非常感谢您的帮助!

【问题讨论】:

  • 字符串已经使用 Unicode 表示,它是 ASCII 的超集。你到底想达到什么目的?是否要将字符显示为 ASCII 码序列?
  • int.Parse 将失败,除非 TextBox3.Text 包含有效数字。你需要进一步解释你到底想要做什么
  • 只能将字符串的字符转换为ascii int。你的意思是:int.Parse(c)
  • 输出应该是什么样子的?
  • 真的需要在这里展示你想要做什么的例子。您是否将数字解析为字符?喜欢65 66 67 => ABC

标签: c# .net winforms


【解决方案1】:

假设您的字符串仅包含 ASCII 字符,您可以使用:

protected void Button1_Click(object sender, EventArgs e)
{
    TextBox3.Text = string.Join(" ", TextBox1.Text.Select(c => (int)c));
}

如果您的字符串由非 ASCII 字符组成,则将返回其 UTF-16 代码单元。如果这是不可取的,你应该包括一个检查:

    if (TextBox1.Text.Any(c => c > 127))
         TextBox3.Text = "Invalid string";

【讨论】:

    【解决方案2】:

    假设您要将字符转换为 ASCII 并以十进制显示它们的代码:

    protected void Button1_Click(object sender, EventArgs e)
    {
        TextBox3.Text = String.Join(" ", Encoding.ASCII.GetBytes(TextBox1.Text));
    }
    

    请注意,此代码首先将文本转换为 ASCII,它仅涵盖从 0 到 127 的字符,因此这取决于您所说的“ASCII”是什么意思。如果您只想要代码点的 Unicode 数字表示,请使用 Douglas 的答案。

    【讨论】:

    • 谢谢,它给我带来了消息错误 BitConverter.ToString(Encoding.ASCII.GetString(TextBox1.Text)); “无法从字符串转换为字节[]”
    • @user3385217 抱歉,已编辑。
    • BitConverter 的输出是十六进制的。
    • 非常感谢!那么我得到这个的原因是什么:78-74-40-67-67-2E-63-6F-6D 而不是这个:116 101 120 116 064 103 103 046 099 111 109?
    • @user3385217 -- 这是因为BitConverter 的输出是十六进制值而不是整数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多