2013-07-18 28 views
19

Chcę utworzyć aplikację, w której użytkownik wprowadziłby numer, a program zwróci użytkownikowi znak.Jak konwertować liczbę znaków na znaki ASCII?

Edycja: Jak o vice versa, zmieniając znak ASCII w liczbę?

+0

Proszę nie edytować pytanie po istnieją odpowiedzi, aby to nowe pytanie (w tym przypadku odwrotnego). Otwórz nowe pytanie. –

Odpowiedz

38

można użyć jednej z następujących metod konwersji numeru do ASCII/Unicode/UTF-16 postać:

można wykorzystywać te metody konwersji wartość określonego 32-bitową liczbę całkowitą jego Unicode charakter:

char c = (char)65; 
char c = Convert.ToChar(65); 

również ASCII.GetString dekoduje zakres bajtów z tablicy bajtów na ciąg znaków:

string s = Encoding.ASCII.GetString(new byte[]{ 65 }); 

Należy pamiętać, że ASCIIEncoding nie zapewnia wykrywania błędów. Każdy bajt większy niż szesnastkowy 0x7F jest dekodowany jako znak zapytania Unicode ("?").

+0

Świetny przykład, to powinna być głosowana odpowiedź! – Damian

+0

from https://msdn.microsoft.com/en-us/library/9hxt0028(v=vs.80).aspx Potrzebuję char z wartością Dec 150 i Hex 96 ... próbowałem wszystkich 3 powyższych ale nie zwraca mi właściwego znaku ..:/ – Samra

3

można go po prostu rzucić.

char c = (char)100; 
+2

To nie działa char c = (char) 48. c == 0 nie 48 – nykwil

5

Edit: Na życzenie, dodałem upewnij się wartość wprowadzana była w zakresie ASCII od 0 do 127. Czy chcesz ograniczyć to do ciebie. W języku C# (i uważam, że .NET w ogóle), char s są reprezentowane za pomocą UTF-16, więc każda ważna wartość znaku UTF-16 może być w nim wrzucona. Jednak możliwe jest, że system nie wie, jak powinien wyglądać każdy znak Unicode, aby mógł się wyświetlać niepoprawnie.

// Read a line of input 
string input = Console.ReadLine(); 

int value; 
// Try to parse the input into an Int32 
if (Int32.TryParse(input, out value)) { 
    // Parse was successful 
    if (value >= 0 and value < 128) { 
     //value entered was within the valid ASCII range 
     //cast value to a char and print it 
     char c = (char)value; 
     Console.WriteLine(c); 
    } 
} 
+0

To działa, ale musisz ustawić pewne minimalne/maksymalne granice dla wartości całkowitej.Nie wszystkie liczby są konwertowane na wyświetlane znaki ASCII. – MadHenchbot

+0

Co powiecie na konwersję znaków ASCII na liczbę? –

+0

@CyraxNguyen: Możesz po prostu rzucić w drugą stronę. 'int i = (int) 'a';' Spowoduje to umieszczenie wartości ascii litery "a" w 'i'. – Cemafor

1

C# reprezentuje znak w UTF-16 kodowania zamiast ASCII. Dlatego przekształcenie liczby całkowitej na znak nie powoduje żadnej różnicy dla A-Z i a-z. Ale pracowałem z kodami ASCII oprócz alfabetów i liczb, które nie działały dla mnie, ponieważ system używa kodu UTF-16. Dlatego przeglądałem kod UTF-16 dla wszystkich znaków UTF-16. Oto moduł:

void utfchars() 
{ 
int i, a, b, x; 
ConsoleKeyInfo z; 
    do 
    { 
    a = 0; b = 0; Console.Clear(); 
    for (i = 1; i <= 10000; i++) 
    { 
    if (b == 20) 
    { 
     b = 0; 
     a = a + 1; 
    } 
    Console.SetCursorPosition((a * 15) + 1, b + 1); 
    Console.Write("{0} == {1}", i, (char)i); 
    b = b+1; 
    if (i % 100 == 0) 
    { 
Console.Write("\n\t\t\tPress any key to continue {0}", b); 
a = 0; b = 0; 
Console.ReadKey(true); Console.Clear(); 
} 
} 
Console.Write("\n\n\n\n\n\n\n\t\t\tPress any key to Repeat and E to exit"); 
z = Console.ReadKey(); 
if (z.KeyChar == 'e' || z.KeyChar == 'E') Environment.Exit(0); 
} while (1 == 1); 
} 
0

Szukałem informacji o tym, jak przekonwertować int na char, który mnie tutaj. Ale moim pytaniem było przekonwertowanie na przykład int z 6 na char z "6". Dla tych, którzy przyszli tutaj jak ja, to jak to zrobić:

int num = 6; 
num.ToString().ToCharArray()[0]; 
+0

Albo po prostu 'num + '0'' –