Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   C# Char nach Int32: aus 3 wird 51 (https://www.delphipraxis.net/49188-char-nach-int32-aus-3-wird-51-a.html)

CalganX 6. Jul 2005 19:38


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:
   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;
Hat jemand eine gute Idee?

Chris

Olli 6. Jul 2005 19:45

Re: Char nach Int32: aus 3 wird 51
 
Geht in C# kein normaler C++-Cast mehr?

Code:
int iCurThing = int(cCurThing);

NicoDE 6. Jul 2005 19:48

Re: Char nach Int32: aus 3 wird 51
 
Zitat:

Zitat von Chakotay1308
Sozusagen das 17fache von 3.

Ich würde eher sagen: das (16+1)-fache.
Oder anders ausgedrückt: 3 or 3 shl 16

CalganX 6. Jul 2005 19:48

Re: Char nach Int32: aus 3 wird 51
 
Hi Olli,
naja... geben tut es das schon:
Code:
iCurThing = (int) cSomeThing;
Aber dabei habe ich genau das gleiche Problem. ;)

@Nico: ähm. Ja, und?

Chris

JasonDX 6. Jul 2005 19:50

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())

Khabarakh 6. Jul 2005 19:54

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

Olli 6. Jul 2005 19:58

Re: Char nach Int32: aus 3 wird 51
 
Zitat:

Zitat von Chakotay1308
Code:
iCurThing = (int) cSomeThing;

Kannst ruhig einen C++-style-Cast benutzen. Es müssen ja nicht immer alle Dämlichkeiten von C weitergepflegt werden! "int(Bla)" ist nämlich besser lesbar/verstehbar als "(int)Bla".
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:

CalganX 6. Jul 2005 20:02

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

Khabarakh 6. Jul 2005 20:07

Re: Char nach Int32: aus 3 wird 51
 
Ich sehe nicht, dass Chimaira weniger hätte :P .

Olli 6. Jul 2005 20:08

Re: Char nach Int32: aus 3 wird 51
 
Zitat:

Zitat von Chakotay1308
@Olli: Naja... int(bla) geht aber nicht. :zwinker:

:gruebel: wie jetzt? C# hat diesen Stil wieder abgeschafft? Oder meinst du, daß die Umwandlung eines ASCII-Zeichens von '0'..'9' nicht geht. Doch geht - aber nur mit Subtraktion! Das war aber deiner anfänglichen Frage nicht zu entnehmen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:47 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz