Integer mit fixen Diggits

salzkrebs

Mitglied
Hallo Tutorials Community!

Ich habe derzeit ein Problem mit der Kommunikation zwischen einem Pic und einem PC.
Und zwar würde ich gerne mit einem C# Programm ein Int senden, welches eine fixe Länge von Diggits hat.
Also in der Form: 001, 055, 200, usw.

Ich habe bei Google schon Ergebnisse mit Strings gefunden, aber hat Integer auch eine Funktion die diese "Umwandlung" erlaubt?

Mit freundlichen Grüßen Manuel
 

Steiner_B

Erfahrenes Mitglied
Nein, für einen Integer gibt es keine direkte Möglichkeit führende Nullen anzuhängen. Aber eine andere Frage dazu: Wenn du Integers direkt senden kannst, warum brauchst du dann die genaue Länge?

Falls dus mit Strings lösen willst kann ich dir die Funktion String.PadLeft empfehlen.
 

salzkrebs

Mitglied
Ich hätte die führenden Nullen gerne, damit ich es in meinem C Programm leichter habe, da es dort mit der String und Int behandlung etwas komplizierter zugeht als in dem C# Programm und außerdem will ich auf dem Pic RAM sparen da das drauf laufende Programm noch ein wenig komplizierter wird :p

Aber danke für deine schnelle Antwort! Ich denk wir werden es mit Strings regeln.
Lösung:
Wenn die Zahl größer als 10 ist:
String s;
if(zahl<10)
s="00"+zahl;
if(zahl>=10)
s="0"+zahl;
return s;
 

Steiner_B

Erfahrenes Mitglied
Wenn du übers Netzwerk sowieso Strings sendest kannst du alle Padding Operationen eh auf String Basis machen. Aber Integers würde ich persönlich eher Binär übertragen als in Textform, da du sonst auch immer das Problem mit . als Komma oder als Tausendertrennzeichen hast.

Zu deinem Code:
C#:
String s = zahl.ToString().PadLeft(3, '0');
macht genau das selbe wie dein Code.
 
Zuletzt bearbeitet von einem Moderator:

salzkrebs

Mitglied
Es sollten keine Komma bzw. Tausendertrennzeichen auftreten.
Die Zahl behandelt eine fortlaufende Nummer, welche mit jedem Paket um eins höher gezählt wird und wir rechnen damit das diese nicht über 1000 kommen wird.
Weiters basiert unser Protokoll auf Ascii Zeichen und nicht auf Binärer Übertragung.

Ich denke mal wir werden deine Zeile verwenden, da uns das 4 Zeilen Code erspart :D
Danke dir!!
 

Shakie

Erfahrenes Mitglied
Interessant, die PadLeft-Methode kannte ich nicht.
Alternativ kannst du auch der ToString-Methode die Anzahl der Nuller mitgeben:
C#:
int Zahl = 1;
String result = Zahl.ToString("000");
Genauso kann man auch festlegen, dass keine Tausendertrennzeichen verwendet werden sollen. Ich finde leider grad kein Beispiel für Letzteres.
 

raiguen

Mitglied
Genauso kann man auch festlegen, dass keine Tausendertrennzeichen verwendet werden sollen.
In Deinem Beispiel werden standmässig keine Tausenderzeichen ausgegeben ;)

Ein Beispiel für Ausgabe=Anzeige von Tausenderpunkten:
Code:
int zahl = 1234;
String result = String.Format("{0:#,#}", zahl);
// result-> 1.234

result ergibt im obigen Beispiel für zahl=0 einen Leerstring.
Soll zahl auch mit 0 als String dargestellt werden soll, dann so formatieren:
Code:
String.Format("{0:#,0}", zahl);
Zu erwähnen sei noch: bei diesen Formatierungen wird keine feste Länge vorgeben!