PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Long in Byte zerlegen(Bascom AVR)



bnitram
07.03.2013, 15:55
Hallo Forum,
ich habe mal wieder eine Frage.
Ich habe eine "Long" Variable. Davon brauche ich jeweils die einzelnen Zahlen. Also möchte ich den Long in Bytes zerlegen.
Habe schonmal etwas gegooglet, aber das hat mir nicht wirklich geholfen. Kann mir das jemand nochmal erklären? evtl. auch mit kleinem Beispiel?
Vielen Dank im voraus.

Mfg
bnitram

BastelWastel
07.03.2013, 16:18
Such mal in der Bascom Hilfe nach "overlay", das sollte sein was du suchst.

Gruss, Andreas

Che Guevara
07.03.2013, 16:24
Hi,

dafür nimmt man normalerweise Overlays. Es gibt zwar auch noch eine andere Möglichkeit, aber ein Overlay ist wohl die eleganteste. Beachte aber, dass eine Overlay-Variable keine eigentständige Variable ist, d.h. sie benötigt keinen Speicherplatz, aber wenn du sie änderst, änderst du damit auch die übergeordnete Variable.
Ein Beispiel findest du in der Bascom-Hilfe ;)

Gruß
Chris

bnitram
07.03.2013, 17:33
Danke schon mal für die Antworten,
ich habe mal etwas gelesen und getestet, aber das will noch nicht so recht.
Hier Ausschnitte aus meinem Code:



Dim Lvar As Long At &H60
Dim Bvar1 As Byte At &H60 Overlay
Dim Bvar2 As Byte At &H61 Overlay
Dim Bvar3 As Byte At &H62 Overlay
Dim Bvar4 As Byte At &H63 Overlay

Dim Byte1 ; Byte2 ; Byte3 ; Byte4 As Byte

Lvar = 12345678

Byte1 = Bvar1
Byte2 = Bvar2
Byte3 = Bvar3
Byte4 = Bvar4


Ich will das so haben, das ich später als "byte1" den Wert habe, der an der entsprechender Stelle von "Lvar" steht. In diesem Fall müsste es ja theoretisch die "1" sein. Aber nur theoretisch. Es funktioniert ja nich :(

Was mache ich falsch?

Mfg
bnitram

PS:
wahrscheinlich alles xD Blick da noch nicht wirklich durch.

Che Guevara
07.03.2013, 18:04
Hi,

so wird das nichts! Informier dich über die Grundlagen, dann wird dir auch klar, warum das so nicht geht ;)
Eine Byte-Variable enthält ja nicht eine Stelle der Zahl, sondern eben ein Byte der Zahl. Das geht los beim LSB, dann das nächste Byte, nochmal ein Byte und dann das MSB.
Wenn du die Stellen auslesen möchtest, wärs evtl. einfacher, das über ne String-Variable & Overlay zu machen ;)

Gruß
Chris

ichbinsisyphos
07.03.2013, 19:10
Was willst du eigentlich machen? Du willst die Dezimalstellen einzeln rausholen? Dann führt der Weg hier nicht zum Ziel.

Mit der Methode hier zerlegst du die gesamte 4-byte Binärrepresentation der long int in bytes, also Gruppen zu 8 bit.

In dem Fall wär 12345678 = 78*256^0 + 97*256^1 + 188*256^2 + 0*256^3.
und der Inhalt der 4 bytes: 78, 97, 188, 0.

Die Dezimalstellen kriegst du mit jede Menge /10, %10 Operationen raus. Bzw. wär Umwandlung in String wirklich eine Überlegung wert.


1ste Stelle = zahl%10

zahl /= 10

2te Stelle = zahl%10

zahl /= 10

3te Stelle = zahl%10

...

bnitram
08.03.2013, 14:07
Ja. Eigentlich wollte ich es so haben das ich auch der Long variable die Einzelnen Ziffer rausholen kann.
Allerdings sind die Zahlen groß. Mit einem String funktioniert das nicht.

Mfg
bnitram

Edit:
Wie könnte ich denn die Long Variable in einen String umwandeln?

malthy
08.03.2013, 14:21
Wie könnte ich denn die Long Variable in einen String umwandeln?

Ehrlich gesagt ist das nicht so schwer mit der Bascom Hilfe rauszufinden.


var = STR(x)

bnitram
08.03.2013, 17:56
Hallo malthy,
danke für dein Tipp.
Jetzt funktioniert alles!

Mfg
bnitram