Byte aus Long entnehmen

OP #5106882
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.
Gast #5106904
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.
Gast #5106918
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
Gast #5106921
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...
#5106931
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
OP #5106946
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
#5107790
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.