Mam znak w C #:
char foo = '2';
Teraz chcę wstawić 2 do int. Uważam, że Convert.ToInt32 zwraca rzeczywistą wartość dziesiętną znaku, a nie liczbę 2. Działa to:
int bar = Convert.ToInt32(new string(foo, 1));
int.parse działa również tylko na stringach.
Czy nie ma natywnej funkcji w C #, aby przejść od znaku do int bez tworzenia ciągu? Wiem, że to trywialne, ale wydaje się dziwne, że nie ma nic rodzimego, który mógłby bezpośrednio dokonać konwersji.
char.GetNumericValue('¼')
daje 0,25. Radości z Unicode ... ;-)char
abyint
nie używaćstring
najpierw.Spowoduje to przekonwertowanie go na int:
To działa, ponieważ każdy znak jest wewnętrznie reprezentowany przez liczbę. Znaki od „0” do „9” są reprezentowane przez kolejne liczby, więc znalezienie różnicy między znakami „0” i „2” daje w wyniku liczbę 2.
źródło
char
to zawsze UTF-16.Czy ktoś rozważał użycie
int.Parse()
iint.TryParse()
jak toJeszcze lepiej
Jest dużo bezpieczniejszy i mniej podatny na błędy
źródło
'0'
od znaku.i możesz z tego stworzyć statyczną metodę:
źródło
Spróbuj tego
źródło
'9'
, ale twój kod tak9
, co się nie kompiluje.Domyślnie używasz UNICODE, więc sugeruję użycie metody wadliwego
int bar = int.Parse(foo.ToString());
Mimo że wartości numeryczne pod są takie same dla cyfr i podstawowych znaków łacińskich.
źródło
To konwertuje na liczbę całkowitą i obsługuje Unicode
CharUnicodeInfo.GetDecimalDigitValue('2')
Możesz przeczytać więcej tutaj .
źródło
Prawdziwy sposób to:
„theNameOfYourInt” - int, w jaki chcesz przekształcić postać.
"theNameOfYourChar" - Char, którego chcesz użyć, aby został przekształcony w int.
Zostaw wszystko inne.
źródło
Zasada:
Binarny z znaków ASCII 0-9 to:
a jeśli weźmiesz do każdego z nich pierwsze 4 LSB (używając bitowego AND z 8'b00001111, co równa się 15), otrzymasz rzeczywistą liczbę (0000 = 0,0001 = 1,0010 = 2, ...)
Stosowanie:
źródło
Zgadzam się z @Chad Grant
Również dobrze, jeśli przekonwertujesz na łańcuch, możesz użyć tej wartości jako wartości liczbowej, jak powiedziano w pytaniu
Starałem się stworzyć prostszy i bardziej zrozumiały przykład
char.GetNumericValue (v) zwraca jako double i konwertuje na (int)
Bardziej zaawansowane zastosowanie jako tablica
źródło
Porównanie niektórych metod opartych na wyniku, gdy znak nie jest cyfrą ASCII:
źródło
Używam Compact Framework 3.5 i nie mam metody „char.Parse”. Myślę, że nie jest źle używać klasy Convert. (Zobacz CLR przez C #, Jeffrey Richter)
Działa ze znakami ASCII lub Unicode
źródło
To zadziałało dla mnie:
źródło
int.Parse(foo.ToString())
, że jest mniej czytelne?Widziałem wiele odpowiedzi, ale wydają mi się one zagmatwane. Nie możemy po prostu użyć rzutowania typów.
Na przykład: -
źródło