PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ergebnis aus Long-Operation in Byte schreiben - wie



dl1akp
22.10.2008, 12:05
Hallo Leute,

habe ein Problem. Offensichtlich mache ich etwas falsch, denn das Ergebnis stimmt immer nicht.

Ich habe eine Berechnung mit drei Long-Variablen (muß sein, die Werte sind so groß...) Das Ergebnis ist IMMER unter 100 und meine Zielvariable ist ein Byte.

Wie kann ich nun das Ergebnis der Log-Operation an diese Byte-Variable übergeben.....???

MfG, im Voraus, Andreas

MeckPommER
22.10.2008, 12:21
Wenn das Ergebnis der Berechnung mit den Long Variablen stets kleiner als 100 ist, dann kannst du das Ergebnis ganz einfach wieder in eine Long-Variable schreiben und das niederwertigste Byte ist dein Ergebnisbyte.

Am einfachsten macht sich das in Bascom, indem du bei der Dimensionierung deiner Variablen das Byte per Overlay (siehe Handbuch) an die richtige Stelle über die Long Variable mit deinem Ergebnis legst, dann ersparst du dir irgendwelche Umrechnungen.

In Bascom funktioniert auch:

Bytevariable = Longvariable

Das Art der Typenumwandlung ist nicht schön, und Fehler lassen sich so schlecht auffinden, es geht aber. Was meiner Erfahrung nach NICHT geht, ist z.B. folgendes:

Bytevariable = Longvariable +1

Ich habe schon desöfteren festgestellt, das so Gewalt-Typenumwandlungen allein stehen müssen und nicht mit einer anderen Berechnung zusammen in einem Befehl stehen dürfen.

Schimpfen tut der Compiler nicht - es geht nur einfach nicht, bzw. kommen unsinnige Werte heraus.

Gruß MeckPommER

dl1akp
22.10.2008, 12:36
Hallo Meckpommer,

danke erst mal.
Und würde das gehen: Long = Byte * 3000 ??

Mfg, Andreas

MeckPommER
22.10.2008, 13:14
Ich glaube, das "könnte" problematisch werden, da rechts schon ein Typenkonflikt zwischen Byte und 3000 besteht. Lieber so machen:

Long = Byte
Long = Long * 3000

Gruß MeckPommER

dl1akp
23.10.2008, 13:01
Hallo,

danke für die Infos. Ich würde es gern mal mit Overlay probieren.
Habe auch in der Hilfe gelesen.

Nun besteht das LONG ja aus vier Bytes. Welche Bytes sind wie angeordnet?
Entschuldigt, die laienhafte Frage, aber das Byte-Zeug bringt mich immer irgendwie durcheinander....
Ich meine, wo ist das erste Byte, das zweite etc. Ich benötige ja ein Ergebnis, welches zwischen 0... und 100 liegt. also brauche ich ja auch das richtige Byte...???

Danke nochmal!
MfG, Andreas

PicNick
23.10.2008, 13:13
0-100 ist gleich das erste


DIM longval AS LONG
DIM byteval AS BYTE AT longval OVERLAY
longval = 100
print byteval