- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 9 von 9

Thema: Long in Byte zerlegen(Bascom AVR)

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    739

    Long in Byte zerlegen(Bascom AVR)

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.02.2006
    Beiträge
    982
    Such mal in der Bascom Hilfe nach "overlay", das sollte sein was du suchst.

    Gruss, Andreas
    Nam et ipsa scientia potestas est..

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    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

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    739
    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:

    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.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    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

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.02.2013
    Ort
    Graz
    Beiträge
    211
    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.

    Code:
    1ste Stelle = zahl%10
    
    zahl /= 10
    
    2te Stelle = zahl%10
    
    zahl /= 10
    
    3te Stelle = zahl%10
    
    ...

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    739
    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?

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    Wie könnte ich denn die Long Variable in einen String umwandeln?
    Ehrlich gesagt ist das nicht so schwer mit der Bascom Hilfe rauszufinden.

    Code:
    var = STR(x)

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.01.2010
    Ort
    Deutschland
    Beiträge
    739
    Hallo malthy,
    danke für dein Tipp.
    Jetzt funktioniert alles!

    Mfg
    bnitram

Ähnliche Themen

  1. Ergebnis aus Long-Operation in Byte schreiben - wie
    Von dl1akp im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 23.10.2008, 13:13
  2. Byte in Bits zerlegen
    Von salle im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 20.12.2006, 13:59
  3. Byte in seine 8 Bits zerlegen
    Von hacker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 10.09.2006, 15:00
  4. Byte zu Long konvertieren
    Von hacker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 14.05.2006, 17:10
  5. Long in Bytes zerlegen - RS232 - und wieder zusammenbauen ??
    Von m@rkus33 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 26.01.2006, 23:46

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests