Hoe teken te krijgen voor een bepaalde ascii-waarde

Hoe kan ik het ascii-teken van een bepaalde ascii-code krijgen.

bijv. Ik ben op zoek naar een methode die gegeven de code 65 “A” zou retourneren.

Bedankt


Antwoord 1, autoriteit 100%

Bedoel je “A” (een string) of ‘A’ (een char)?

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

Merk op dat ik eerder naar Unicode heb verwezen dan naar ASCII, aangezien dat de oorspronkelijke tekencodering van C# is; in wezen is elk chareen UTF-16-codepunt.


Antwoord 2, autoriteit 22%

string c = Char.ConvertFromUtf32(65);

c zal “A” bevatten


Antwoord 3, autoriteit 9%

Dit werkt in mijn code.

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

Retour: asciichar = 'A';


Antwoord 4, autoriteit 7%

Er zijn een paar manieren om dit te doen.

Char struct gebruiken (naar string en weer terug)

string _stringOfA = char.ConvertFromUtf32(65);
int _asciiOfA = char.ConvertToUtf32("A", 0);

Gewoon de waarde casten (char en string getoond)

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

ASCIIEncoding gebruiken.
Dit kan in een lus worden gebruikt om een ​​hele reeks bytes te maken

var _bytearray = new byte[] { 65 };
ASCIIEncoding _asiiencode = new ASCIIEncoding();
string _alpha = _asiiencode .GetString(_newByte, 0, 1);

Je kunt de type-converterklasse overschrijven, dit zou je in staat stellen om een ​​mooie validatie van de waarden uit te voeren:

var _converter = new ASCIIConverter();
string _stringA = (string)_converter.ConvertFrom(65);
int _intOfA = (int)_converter.ConvertTo("A", typeof(int));

Hier is de klas:

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);
    }
}

Antwoord 5

Hier is een functie die voor alle 256 bytes werkt en ervoor zorgt dat je voor elke waarde een teken ziet:

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
}

Antwoord 6

Het kan ook op een andere manier worden gedaan

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

en druk het resultaat af. door de foreach-lus te gebruiken.


Antwoord 7

Probeer dit eens:

int n = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("data is: {0}", Convert.ToChar(n));

Antwoord 8

Ik geloof dat een simpele cast kan werken

int ascii = (int) "A"


Antwoord 9

Sorry, ik ken Java niet, maar ik had vanavond hetzelfde probleem, dus ik schreef dit (het is in 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;
}

Other episodes