Forum: Mikrocontroller und Digitale Elektronik Byte aus Long entnehmen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Dieter B. (ditt)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Shiften und verunden mit 0xFF

von Dieter B. (ditt)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Danke, werde ich testen.

von Georg (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


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

von Wolfgang (Gast)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.