Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Bei StrToInt vorangestellte Nullen beibehalten


unrealer - So 12.10.08 17:48
Titel: Bei StrToInt vorangestellte Nullen beibehalten
Servus alle zusammen,

Ich hab folgendes Problem: Ich möchte mit Hilfe von StrToInt einen String zu Integer umwandeln. Leider ist jedoch in diesem String eine vorangestellte Null, die ich jedoch UNBEDINGT beibehalten muss (z.B 01 oder 001 usw.)
Kann mir jemand helfen ??
THX


Delete - So 12.10.08 17:55

Hm? Ein Integer ist ein Integer, d.h. eine führende Null zählt nicht: 010 = 10. Du könntest höchstens die Ausgabe der Zahl formatieren.


Timosch - So 12.10.08 17:56

Wie soll das denn gehen? Schließlich ist 01 und 1 das selbe. Intern wird eine 2 als 10b gespeichert; wie soll man da vorangestellte Nullen mitspeichern. Andersrum gehts natürlich: Bei einem IntToStr kannst du danach natürlich Nullen vorneran stellen. Deine Frage lässt auf ein schlecht durchdachtes Programm schließen. Sag mal, was du vorhast!


unrealer - So 12.10.08 21:45

Aaaalso, es geht darum: ich möchte mit Hilfe eines Servoboards handelsübliche Servos steuern. Hierzu muss ich ein High Bit angeben (das wäre dann z.b bei der Zahl 254 die 2) und eben die Lowbits (im vorhin genannten Beispiel die 54). Das ganze möchte ich mit Hilfe einer normalen Trackbar machen. Wäre super, wenn einer von euch ne Lösung parat hätte ;)


Dunkel - So 12.10.08 21:53

Belasse einfach Deinen String und schneide die benötigten Ziffern via Copy(); aus dem String. Das Ergebnis kannst Du dann einfach zu einem Integer machen. Wenn sich die lo- und hi-Bits immer an der selben Stelle im String befinden, sollte das ganz gut gehen.


>M@steR< - So 12.10.08 21:54

Gelöscht


Yogu - So 12.10.08 21:57

High- und Low-Bytes macht man in der Regel so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var FullWord: Word; LowByte, HighByte: Byte;
begin
  LowByte := FullWord and $00FF;
  HighByte := (FullWord and $FF00) shr 2 // oder shl?

  FullWord := LowByte + HighByte * $100;
end;

Du wandelst einfach den gesamten Wert TrackBar.Position in ein Word um (FullWord), das du dann wie oben genannt aufspaltest. Da ist gar nichts von führenden Nullen oder so zu sehen - du teilst einfach ein Word - ein doppeltes Byte - in zwei einzelne Bytes auf.


Delete - So 12.10.08 23:16

Hier wird ansheinend wieder die Darstellung und Verabeitung durcheinander geschmissen.


Boldar - Do 16.10.08 19:05

Ausserdem kann man führende Nullen mit Format beibehalten, siehe OH.


Delete - Do 16.10.08 19:23

Das ist aber schon wieder Darstellung, wie Luckie bereits sagte.


Xentar - Do 16.10.08 19:26

user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
High- und Low-Bytes macht man in der Regel so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var FullWord: Word; LowByte, HighByte: Byte;
begin
  LowByte := FullWord and $00FF;
  HighByte := (FullWord and $FF00) shr 2 // oder shl?

  FullWord := LowByte + HighByte * $100;
end;

Du wandelst einfach den gesamten Wert TrackBar.Position in ein Word um (FullWord), das du dann wie oben genannt aufspaltest. Da ist gar nichts von führenden Nullen oder so zu sehen - du teilst einfach ein Word - ein doppeltes Byte - in zwei einzelne Bytes auf.

Man kann auch einfach Hi() und lo() verwenden ;)


Boldar - Do 16.10.08 19:27

user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Das ist aber schon wieder Darstellung, wie Luckie bereits sagte.


Naja, ich habe halt nur auf die ursprüngliche Frage geantwortet.


Yogu - Do 16.10.08 20:06

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
High- und Low-Bytes macht man in der Regel so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var FullWord: Word; LowByte, HighByte: Byte;
begin
  LowByte := FullWord and $00FF;
  HighByte := (FullWord and $FF00) shr 2 // oder shl?

  FullWord := LowByte + HighByte * $100;
end;

Du wandelst einfach den gesamten Wert TrackBar.Position in ein Word um (FullWord), das du dann wie oben genannt aufspaltest. Da ist gar nichts von führenden Nullen oder so zu sehen - du teilst einfach ein Word - ein doppeltes Byte - in zwei einzelne Bytes auf.

Man kann auch einfach Hi() und lo() verwenden ;)

:autsch:


Hidden - Do 16.10.08 21:30

TD06 Hilfe hat folgendes geschrieben:
Note: Hi treats Integer as a 16-bit value, even if it is 32-bit.
d.h. Bit 1 oder 3? :P