So erhalten Sie Zeichen für einen bestimmten ASCII-Wert


Antworten:


149

Meinst du "A" (a string) oder "A" (a char)?

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

Beachten Sie, dass ich mich eher auf Unicode als auf ASCII bezogen habe, da dies die native Zeichencodierung von C # ist. Im Wesentlichen ist jeder charein UTF-16-Codepunkt.


@ Jon Skeet: Wenn ich Unicode = 128 setze, warum bin ich nicht ballen, um ein entsprechendes Zeichen zu bekommen.
— Iorn Man

@EthanHunt: Dann bekommst du U + 0080, ein Steuerzeichen. Ich vermute, Sie denken an 128 in einer anderen Zeichenkodierung.
— Jon Skeet

@ Jon skeet: Eigentlich möchte ich die Zeichenwerte für 0x80, 0x81-oxFF anzeigen (ich konvertiere diese Werte in Dezimalzahlen, dh 128-255, aber ich konnte das entsprechende Symbol nicht erhalten.), Wie ich diese Symbole auch anzeigen kann.
— Iorn Man

@EthanHunt: Was meinst du mit "den Zeichenwerten"? U + 0080 ist ein Steuerzeichen - wie würden Sie erwarten, dass es angezeigt wird? Ich vermute wieder, dass Sie tatsächlich über Werte 128-255 in einer anderen Codierung sprechen, aber Sie haben uns nicht gesagt, um welche Codierung es sich handelt.
— Jon Skeet

@ Jon Skeet: Eigentlich bin ich neu in c #, ich mache eine virtuelle Tastatur wie eine Anwendung, in der ich diese Zeichen auf Schaltflächen als Text festlegen möchte.
— Iorn Man


13

Das funktioniert in meinem Code.

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

Rückkehr: asciichar = 'A';


8

Es gibt einige Möglichkeiten, dies zu tun.

Verwenden von char struct (zum String und wieder zurück)

string _stringOfA = char.ConvertFromUtf32(65);

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

Einfach den Wert umwandeln (Zeichen und Zeichenfolge werden angezeigt)

char _charA = (char)65;

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

Verwenden von ASCIIEncoding.
Dies kann in einer Schleife verwendet werden, um ein ganzes Array von Bytes zu erstellen

var _bytearray = new byte[] { 65 };

ASCIIEncoding _asiiencode = new ASCIIEncoding();

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

Sie können die Typkonverterklasse überschreiben. Auf diese Weise können Sie die Werte auf ausgefallene Weise überprüfen:

var _converter = new ASCIIConverter();

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

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

Hier ist die Klasse:

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

Dies kann auch auf andere Weise erfolgen

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

und dann Ergebnis drucken. mit foreachSchleife.


0

Hier ist eine Funktion, die für alle 256 Bytes funktioniert und sicherstellt, dass für jeden Wert ein Zeichen angezeigt wird:

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
}

Wenn das Ziel darin bestand, für jeden ASCII-Codepunkt einen sichtbaren Unicode-Codepunkt zu erhalten, können die Kontrollbilder durch die Kontrollbilder ersetzt werden . - ␁ ␂ ␃ ␄ ␅ ␆ ␇ ␈ ␉
— Tom Blodget

1
@ TomBlodget Schön zu wissen, aber das ist keine Antwort auf die Frage des OP. Sie können gerne eine weitere C # -Funktion einreichen, die das tut, was das OP verlangt.
— Soonts

1
Beachten Sie, dass ASCII nur bis zu 127 reicht. Alles darüber ist einfach kein ASCII, daher ist Ihre Methode zumindest schlecht benannt.
— Jon Skeet

Es kann auch mit unerwarteten Zahlen umgehen, großartig.
— Sayed Muhammad Idrees

-1

Ich glaube, eine einfache Besetzung kann funktionieren

int ascii = (int) "A"


Jetzt wollte er Hilfe mit dem Gegenteil. Ein
— Zeichen

11
Nicht, dass der angegebene Code sowieso kompiliert wird - Sie können nicht von stringnach konvertieren int. Wenn es 'A'so wäre, würde es funktionieren, aber die Besetzung wäre überflüssig, da es eine implizite Konvertierung von charnach gibt int.
— Jon Skeet

-2

Entschuldigung, ich kenne Java nicht, aber ich hatte heute Abend das gleiche Problem, also habe ich das geschrieben (es ist 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;
}

Um jede Kombination zu erhalten, führen Sie sie einfach in einer Schleife aus.

Code ist total durcheinander!
— Sayed Muhammad Idrees
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.