Forum: Mikrocontroller und Digitale Elektronik Byte aus Long entnehmen


von Dieter B. (ditt)


Lesenswert?

Guten Tag,

aus einem String kann ich mit left,mid right bytes entnehmen.
Wie funktioniert das,
 wenn ich eine Variable im Long-format habe?

Vielen Dank.
Dieter

von Peter II (Gast)


Lesenswert?

Dieter B. schrieb:
> wenn ich eine Variable im Long-format habe?

rechnen oder in einen String umwandeln.

123 -> 2. Stelle

123 module 100 = 23
23 / 10 = 2

von Erik (Gast)


Lesenswert?

Shiften und verunden mit 0xFF

von Dieter B. (ditt)


Lesenswert?

Ich hatte vergessen, dass ich mit Bascom arbeite.

Wie ist das mit dem shiften und verrunden gemeint?
Hast Du mal ein Beispiel.

ich habe z.B. in der Variablen die Werte 123 und
möchte die beiden ersten Bytes, also 12 entnehmen.

von Peter II (Gast)


Lesenswert?

Dieter B. schrieb:
> ich habe z.B. in der Variablen die Werte 123 und
> möchte die beiden ersten Bytes, also 12 entnehmen.

einfach durch 10 rechnen?

von Dominik S. (dasd)


Lesenswert?

Dieter B. schrieb:
> ich habe z.B. in der Variablen die Werte 123 und
> möchte die beiden ersten Bytes, also 12 entnehmen.

In einem Long mit Inhalt 123 sind die ersten beiden Bytes aber sicher 
nicht 12.

von Dieter B. (ditt)


Lesenswert?

richtig, das "ersten beiden bytes" war jetzt nicht auf die Position 
innerhalb
der Variablen bezogen, sondern auf die Stellen.
Ich muss sicher erstmal die Länge feststellen.

von Peter II (Gast)


Lesenswert?

Dieter B. schrieb:
> Ich muss sicher erstmal die Länge feststellen.

nein.

Was sollte denn bei 1234 rauskommen?

beschreibe doch mal etwas technischer was du willst. Vermutlich meinst 
du Ziffern im Dezimalsystem. Schreibt aber was von Byte und Long.

Byte aus eine Long ist etwas komplett anders.

von Dieter B. (ditt)


Lesenswert?

also ich habe eine variable im Long-Format.
dort hinein wird eine Zahl z.B. 123   geschrieben.
Je nach meiner Rechenroutine brauche ich davon alle
3 Stellen, oder die ersten beiden, oder die erste Stelle.

von Peter II (Gast)


Lesenswert?

Dieter B. schrieb:
> Je nach meiner Rechenroutine brauche ich davon alle
> 3 Stellen, oder die ersten beiden, oder die erste Stelle.

dann rechne so lange durch 10 bis die Anzahl von stellen übrig bleibt 
die du willst.

von Dieter B. (ditt)


Lesenswert?

Danke, werde ich testen.

von Georg (Gast)


Lesenswert?

Dieter B. schrieb:
> also ich habe eine variable im Long-Format.
> dort hinein wird eine Zahl z.B. 123   geschrieben

Da machst du einen String draus (was du mit Stelle bezeichnest macht ja 
nur im Dezimalformat Sinn, nicht im Binärformat) und verfährst wie 
zuvor.

Georg

von npn (Gast)


Lesenswert?

Dieter B. schrieb:
> also ich habe eine variable im Long-Format.
> dort hinein wird eine Zahl z.B. 123   geschrieben.

Wie wird die reingeschrieben?
Als Dezimalzahl 123? Das wäre in Hex eine "7B".
Oder als 3 einzelne Bytes "1" "2" "3"?
Oder als ASCII? Dann wäre das "0x31" "0x32" "0x33"...

> Je nach meiner Rechenroutine brauche ich davon alle
> 3 Stellen, oder die ersten beiden, oder die erste Stelle.

Was macht deine "Rechenroutine"?

Du solltest ein wenig mehr ins Detail gehen, damit jemand eine Chance 
hat, dir zu helfen...

von Ralf G. (ralg)


Lesenswert?

Dieter B. schrieb:
> ich habe z.B. in der Variablen die Werte 123 und
> möchte die beiden ersten Bytes, also 12 entnehmen.

Dieter B. schrieb:
> also ich habe eine variable im Long-Format. ...
> Je nach meiner Rechenroutine brauche ich davon alle
> 3 Stellen, oder die ersten beiden, oder die erste Stelle.

Da haust du mit Sicherheit gewaltig was durcheinander!

Wenn du, z.B., von einer Dezimalzahl die ersten beiden Stellen haben 
willst, dann hat das mit Bytes gar nichts zu tuen. Und ob diese 
Dezimalzahl jetzt im Format long, float oder sonstwas vorliegt, spielt 
keine Rolle. Mit dem Dezimalsystem kennt sich so ein µC nämlich ganz 
schlecht aus. Deshalb musst du sowas ganz normal 'von Hand' ermitteln.

z.B.:
1
s9 = val / 1000000000
2
val = val % 1000000000
3
s8 = val / 100000000
4
val = val % 100000000
5
...
6
s0 = val
... und dann die Stellen 'je nach Rechenroutine' raussuchen.

Zusatz:
 - Vaiable s evtl als Array (in Basic heißt das, glaube ich, Feld)
 - '/' ganz normal 'durch'
 - '%' Rest ermitteln

von Dieter B. (ditt)


Lesenswert?

ich habe jetzt einfach, wie Peter II vorgeschlagen hat, immer durch 10 
geteilt. Danach war immer die letzte Stelle weg. Genauso
wollte ich das.
Vielen Dank für die vielen Hinweise, toll.

Noch eine schönen "verregneten" Abend.
Dieter

von André R. (andr_r619)


Lesenswert?

Und wenn Du die wegfallende Stelle brauchst, dann nimmst Du statt 
Geteilt Modulo („Rest“ einer Division, Rechenzeichen %):

123 / 10 = 12
123 % 10 = 3

Grundschule: 123 / 10 = 12 Rest 3

Willst Du die zweite Stelle haben:

123 / 10 % 10 = 2

Und die Dritte:

123 / 100 % 10 = 1

von Dieter B. (ditt)


Lesenswert?

Vielen Dank für die Ergänzungen.
Kann man sicher mal gebrauchen.
Dieter

von Wolfgang (Gast)


Lesenswert?

Dieter B. schrieb:
> ich habe z.B. in der Variablen die Werte 123 und
> möchte die beiden ersten Bytes, also 12 entnehmen.

Dann ist das ein String. Als Zahl würde es in ein Byte rein passen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.