如何获得给定ascii值的字符


Answers:


149

您是指“ A”(a string)还是“ A”(a char)?

int unicode = 65;
char character = (char) unicode;
string text = character.ToString();

注意,我指的是Unicode而不是ASCII,因为这是C#的本机字符编码。本质上每个char都是一个UTF-16代码点。


@Jon Skeet:如果我将unicode设置为128,为什么我不大胆地获取与之对应的字符。
Iorn Man

@EthanHunt:然后您将获得U + 0080,这是一个控制字符。我怀疑您正在考虑采用某些不同的字符编码的128。
乔恩·斯基特

@Jon skeet:实际上,我想显示0x80、0x81- oxFF的字符值(我将这些值转换为十进制,即128-255,但我无法获得与之相对应的符号。)如何显示这些符号。
Iorn Man

@EthanHunt:“字符值”是什么意思?U + 0080是控制字符-您希望它如何显示?同样,我怀疑您实际上是在谈论其他编码形式的值128-255,但是您没有告诉我们这是什么编码形式。
乔恩·斯基特

@Jon Skeet:实际上我是C#的新手,我正在做一个像应用程序这样的虚拟键盘,在其中我想将按钮上的这些字符设置为其文本。
Iorn Man


13

这在我的代码中有效。

string asciichar = (Convert.ToChar(65)).ToString();

返回: asciichar = 'A';


8

有几种方法可以做到这一点。

使用char struct(以字符串形式返回)

string _stringOfA = char.ConvertFromUtf32(65);

int _asciiOfA = char.ConvertToUtf32("A", 0);

简单地转换值(显示的字符和字符串)

char _charA = (char)65;

string _stringA = ((char)65).ToString();

使用ASCIIEncoding。
可以在循环中使用它来完成整个字节数组

var _bytearray = new byte[] { 65 };

ASCIIEncoding _asiiencode = new ASCIIEncoding();

string _alpha = _asiiencode .GetString(_newByte, 0, 1);

您可以重写类型转换器类,这将使您可以对值进行一些精美的验证:

var _converter = new ASCIIConverter();

string _stringA = (string)_converter.ConvertFrom(65);

int _intOfA = (int)_converter.ConvertTo("A", typeof(int));

这是课程:

public class ASCIIConverter : TypeConverter
{
    // Overrides the CanConvertFrom method of TypeConverter.
    // The ITypeDescriptorContext interface provides the context for the
    // conversion. Typically, this interface is used at design time to 
    // provide information about the design-time container.
    public override bool CanConvertFrom(ITypeDescriptorContext context,
       Type sourceType)
    {
        if (sourceType == typeof(string))
        {
            return true;
        }
        return base.CanConvertFrom(context, sourceType);
    }

    public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
    {
        if (destinationType == typeof(int))
        {
            return true;
        }
        return base.CanConvertTo(context, destinationType);
    }


    // Overrides the ConvertFrom method of TypeConverter.
    public override object ConvertFrom(ITypeDescriptorContext context,
       CultureInfo culture, object value)
    {

        if (value is int)
        {
            //you can validate a range of int values here
            //for instance 
            //if (value >= 48 && value <= 57)
            //throw error
            //end if

            return char.ConvertFromUtf32(65);
        }
        return base.ConvertFrom(context, culture, value);
    }

    // Overrides the ConvertTo method of TypeConverter.
    public override object ConvertTo(ITypeDescriptorContext context,
       CultureInfo culture, object value, Type destinationType)
    {
        if (destinationType == typeof(int))
        {
            return char.ConvertToUtf32((string)value, 0);
        }
        return base.ConvertTo(context, culture, value, destinationType);
    }
}

1

也可以通过其他方式完成

byte[] pass_byte = Encoding.ASCII.GetBytes("your input value");

然后打印结果。通过使用foreach循环。


0

这是一个适用于所有256个字节的函数,并确保您会看到每个值的字符:

static char asciiSymbol( byte val )
{
    if( val < 32 ) return '.';  // Non-printable ASCII
    if( val < 127 ) return (char)val;   // Normal ASCII
    // Workaround the hole in Latin-1 code page
    if( val == 127 ) return '.';
    if( val < 0x90 ) return "€.‚ƒ„…†‡ˆ‰Š‹Œ.Ž."[ val & 0xF ];
    if( val < 0xA0 ) return ".‘’“”•–—˜™š›œ.žŸ"[ val & 0xF ];
    if( val == 0xAD ) return '.';   // Soft hyphen: this symbol is zero-width even in monospace fonts
    return (char)val;   // Normal Latin-1
}

如果目标是为每个ASCII码点获得一个可见的Unicode码点,则可以使用“控制图片”替换C0控制字符。␀␁␂␃␄␅␆␇ ␈␉␊␋␌␍␎␏ ...
汤姆·布洛杰特

1
@TomBlodget很高兴知道,但这不是对OP的问题的答案。随时提交另一个C#函数,该函数将执行OP的要求。
即将

1
请注意,ASCII最多只能上升到127。高于该值的任何东西都不是ASCII,因此至少您的方法命名不正确。
乔恩·斯基特

它还处理意外的数字,很棒。
穆罕默德·伊德雷斯(Muhammad Idrees)

-1

我相信一个简单的演员表就能奏效

int ascii = (int) "A"


现在他想要反面的帮助。.从数字中获取字符
StefanE 2011年

11
并不是说给定的代码会继续编译-您不能将from转换stringint。如果是'A'这样,它将起作用,但是由于存在从到的隐式转换,因此强制转换将是多余的。charint
乔恩·斯基特

-2

抱歉,我不懂Java,但是今晚我遇到了同样的问题,所以我写了这个(在C#中)

public string IncrementString(string inboundString)    {
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(inboundString.ToArray);
bool incrementNext = false;

for (l = -(bytes.Count - 1); l <= 0; l++) {
    incrementNext = false;

    int bIndex = Math.Abs(l);
    int asciiVal = Conversion.Val(bytes(bIndex).ToString);

    asciiVal += 1;

    if (asciiVal > 57 & asciiVal < 65)
        asciiVal = 65;
    if (asciiVal > 90) {
        asciiVal = 48;
        incrementNext = true;
    }

    bytes(bIndex) = System.Text.Encoding.ASCII.GetBytes({ Strings.Chr(asciiVal) })(0);

    if (incrementNext == false)
        break; // TODO: might not be correct. Was : Exit For
}

inboundString = System.Text.Encoding.ASCII.GetString(bytes);

return inboundString;
}

要获得每种组合,只需循环运行即可。

代码被彻底搞砸了!
穆罕默德·伊德雷斯(Muhammad Idrees)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.