![]() |
Char nach Int32: aus 3 wird 51
Hi,
ich versuche gerade ein wenig mit Strings und Integern herum zu hantieren. Leider funktioniert das nicht ganz so, wie ich das gerne hätte. :( Ich habe also einen String in ein Array of Char packen können. Nun will ich aber alle Elemente dieses Arrays als Zahlen haben, also dachte ich mir - schlau wie ich bin -, dass ich mit Convert.ToInt32 eigentlich auf das gewünschte Ergebnis kommen würde. Aber leider dann doch nicht. :? Ich habe mit Debuggen bereits herausgefunden, dass in dem entsprechenden Array-Element '3' drin steht. Nach der Umwandlung in Int32 ist die int-Variable mit dem Wert 51 gefüllt. Sozusagen das 17fache von 3. Aber warum? Ich kann eigentlich keinen Fehler entdecken. :gruebel: Meine Methode sieht so aus:
Code:
Hat jemand eine gute Idee?
char cCurThing = ISBN.ToCharArray()[idx-1]; // idx ist eine beliebige Integervariable. cCurThing hat lt. Debugging auch den richtigen Wert (z.B. '3')
int iCurThing = Convert.ToInt32(cCurThing); // hier hapert's: denn cCurThing hat immer noch den richtigen Wert, aber iCurThing bekommt den Wert 51, obwohl cCurThing eigentlich '3' ist iCheckSum = idx * iCurThing; Chris |
Re: Char nach Int32: aus 3 wird 51
Geht in C# kein normaler C++-Cast mehr?
Code:
int iCurThing = int(cCurThing);
|
Re: Char nach Int32: aus 3 wird 51
Zitat:
Oder anders ausgedrückt: 3 or 3 shl 16 |
Re: Char nach Int32: aus 3 wird 51
Hi Olli,
naja... geben tut es das schon:
Code:
Aber dabei habe ich genau das gleiche Problem. ;)
iCurThing = (int) cSomeThing;
@Nico: ähm. Ja, und? Chris |
Re: Char nach Int32: aus 3 wird 51
cCurThing hat den Wert '3'
nach dem Convert hat iCurThing den Wert 51 Man beachte die >'< ;) Soll heißen: Du hast sowas ähnliches wie den Ascii-Code ;) versuch mal nicht 3 im String an der Stelle stehn zu haben, sondern 4 dann wird der integerwert 52 sein ;) Dass du aus einem Char den wirklichen Integerwert bekommst musst du ihn erst in einen String umwandeln:
Code:
Convert.ToInt32(cCurThing.ToString())
|
Re: Char nach Int32: aus 3 wird 51
Es gibt sogar eine Methode "Char.GetNumericValue", die gibt aber Double zurück:
Code:
char c = '3';
int i = (int)Char.GetNumericValue(c); Console.WriteLine(i); Console.ReadLine(); |
Re: Char nach Int32: aus 3 wird 51
Zitat:
Zumal ja gerade Operatoren für Typumwandlung seit C++ existieren und so nichtmal das Argument zieht, daß "int(Bla)" einem Funktionsaufruf zu ähnlich sähe. @Chimaira: Du hast vollkommen recht. :wall: |
Re: Char nach Int32: aus 3 wird 51
Hi,
@Mike: ah. :idea: So geht's. Habe mir schon fast gedacht, dass es damit zusammenhängt, aber wusste nicht, wie ich das Umgehen konnte. :) Danke dir! :thumb: @Sebastian: naja, dann habe ich aber zwei Umwandlungen auf einmal. ;) Das kostet mehr Zeit. :tongue: @Olli: Naja... int(bla) geht aber nicht. :zwinker: Chris |
Re: Char nach Int32: aus 3 wird 51
Ich sehe nicht, dass Chimaira weniger hätte :P .
|
Re: Char nach Int32: aus 3 wird 51
Zitat:
|
Re: Char nach Int32: aus 3 wird 51
Hi,
@Sebastian: :wall: Stimmt. :oops: @Oliver: naja, es geht technisch nicht. ;) Der Debugger meckert einfach. Chris |
Re: Char nach Int32: aus 3 wird 51
@Chris
Nico wollte damit andeuten, dass char unicode enthält. ;) Zitat:
Ein safe cast auf einen falschen Typen (x as SomeType) führt zur Exception. Bei value types führt es unweigerlich zur Exception, da value types in .Net keine null references sein können. Zitat:
Für eigene Klassen/value types kann man den Operator für implizite oder explizite Umwandlung überladen. Es gibt diese Überladung zum Bleistift für einen expliziten Cast von Char <-> Int32. |
Re: Char nach Int32: aus 3 wird 51
Zitat:
|
Re: Char nach Int32: aus 3 wird 51
der "harte" typecast geht in c# weiterhin (sofern man jetzt nich irgendwas absolut unmögliches machen will) mit den implicit/explicit typecasts. das problem scheint mir hier wirklich das verwechseln des "ASCII"-Wertes (oder was auch immer es jetzt genau ist) mit der Zahl, die dieser Wert darstellt zu sein.
btw: der gute alte freund google: ![]() |
Re: Char nach Int32: aus 3 wird 51
Zitat:
Code:
[edit=alcaeus]Code-Tag repariert ;) Mfg, alcaeus[/edit]
class X{}
class Y{} struct A{} struct B{} class Z { void Miep() { X x = new X(); Y y = (Y)x; // null reference A a = new A(); B b = (B)a; // boom, da b nicht null sein darf! } } |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz