如何在.NET中将ASCII值转换为字符

14

这里有许多关于如何将字符转换为其ASCII值的帖子。
但是我想要完全相反的。
我有一个存储为int类型的ASCII值,我想在一个字符串中显示它的ASCII字符表示。

例如,请显示将int 65 转换为 A 的代码。

我当前的代码为String::Format("You typed '{0}'", (char)65)

但是这会导致"You typed '65'",而我想要的是"You typed 'A'"

我正在使用C++/CLI,但我猜任何.NET语言都可以…

(事后编辑了问题,以改进未来的搜索者)


4
“posthumous” 的意思是死后的。我希望得到一些能让我实现死后编辑的技术! - jason
1
@Jason,后期编辑最重要的前提条件之一是你必须已经去世了。但是我不建议你尝试测试这个!:D (当然,我指的是“事后编辑”,但那不是一个词) - demoncodemonkey
7个回答

21

有几种方法,以下是其中一些:

char c = (char)65;
char c = Convert.ToChar(65);
string s = new string(65, 1);
string s = Encoding.ASCII.GetString(new byte[]{65});

1
最后两个应该附加上 [0]。也就是说,例如 char c = new string(65, 1)[0]; - jason
1
@Jason:是的,如果你真的想要它作为一个字符,你可以这样做。如果他将它与其他字符串连接起来,那么创建一个字符串来创建一个将在连接之前被转换为字符串的字符是没有意义的。 - Guffa

9

在C++中:

int main(array<System::String ^> ^args)
{
    Console::WriteLine(String::Format("You typed '{0}'", Convert::ToChar(65)));
    return 0;
}

1
我们有一个获胜者!谢谢 :) - demoncodemonkey

8
对于ASCII值,你只需要将其强制转换为char类型即可?(C#)
char a = (char)65;

或者作为字符串:
string a = ((char)65).ToString();

1
它不显示数字0到9的NUL、SOH字符。明白了吗? - Manish Dubey
1
@ManishDubey 它会正常工作的;它们只是不可打印的控制码。 - Marc Gravell

3
 Dim str as string    
 str = Convert.ToChar(65).ToString()
 msgbox(str)

2
复杂的版本是:

当然,这个说法比较复杂:

public string DecodeAsciiByte(byte b) {
    using(var w = new System.IO.StringWriter()) {
        var bytebuffer = new byte[] { b };
        var charbuffer = System.Text.ASCIIEncoding.ASCII.GetChars(bytebuffer);
        w.Write(charbuffer);
        return w.ToString();
    }
}

当然,在我阅读使用 Encoding.GetString 方法的答案之前,我不知道这一点。噢。

public string DecodeAsciiByte(byte b) {
    return System.Text.Encoding.ASCII.GetString(new byte[] { b });
}

1

只需进行强制类型转换;再简单不过了。

// C#
int i = 65;
Console.WriteLine((char)i);

1
有许多方法可以实现这一点。如果您想让他们输入连续的数字,没有分隔符和空格,那么可以使用类似以下的内容:
    string userInput = "123456";
    var digits = str.Select(c => Convert.ToInt32(c.ToString()));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接