Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Bytereihenfolge umkehren

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 17.10.2005, 19:13    Titel: Bytereihenfolge umkehren Antworten mit Zitat

Servus!

Kann das sein, dass es im Auslesen von Dateien in FB doch größere Unterschiede zu QB gibt?

In der Datei, die ich einlesen möchte, steht (in Hex):"00 00 00 D0". Wenn ich diesen Wert als Integer auslesen möchte, bekomme ich allerdings den Wert -805306368 bzw. &HD0000000. Also genau falschrum.

Da ich die Dateien nicht verändern kann (Quelldaten sind nicht von mir), muss ich irgendwie FB den unterschied zwischen Little- und Big Endian beibringen.

Hab ich nur irgendwas übersehen, und meine grandiose Dummheit unter Beweis gestellt, muss ich mir da selber was zusammenschreiben, oder gibts da was fertiges?

Gruß
Lutz traurig Ifer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mjs



Anmeldungsdatum: 26.09.2005
Beiträge: 75
Wohnort: Adelheidsdorf

BeitragVerfasst am: 17.10.2005, 22:22    Titel: Antworten mit Zitat

Der Integer-Wert wird schon korrekt ausgelesen. Der einzige Unterschied, den es gibt ist, dass INTEGER 4 Bytes (FB) braucht statt 2 (QB). Die Byte-Reihenfolge ist aber die gleiche (little-endian).

Gruß,
Mark
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1875
Wohnort: D59192

BeitragVerfasst am: 17.10.2005, 22:30    Titel: Antworten mit Zitat

Hi,
wenn die Datei von QB "normal" geschrieben wurde hat Mark recht.
Wenn die Datei aus anderen Quellen stammt mußt du basteln!
Eine schöne Lösung gibts in ASM:
Code:
Dim a As uInteger
a=&HD0000000
?a
ASM mov eax ,a
ASM bswap eax
ASM mov a, eax
?a
Sleep
end

Zitat:
BSWAP reg32 ; nimmt eine Konvertierung vor, indem das erste und vierte Byte sowie das zweite und dritte Byte gegeneinander ausgetauscht werden.

Gruß
Volta
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.


Zuletzt bearbeitet von volta am 17.10.2005, 22:33, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 17.10.2005, 22:31    Titel: Antworten mit Zitat

Servus!

Das Integer auf 4 statt 2 Byte gewachsen sind, ist mir bekannt. Trotzdem suche ich immernoch nach einer Lösung, Big-Endian in Little-Endian zu konvertieren. Ich dachte zwar, QB würde große Endiander nehmen, aber da die Dateien nicht mit QB erzeugt werden, ist das letztendlich Wurscht.

Ich versuche grade single-Werte einzulesen, und mir fehlt da noch ne kreative Idee, die umzudrehen... Im Moment mache ich das, in dem ich die per union mit 4 Bytes zusammenlege, und die rotiere.

edit
Volta, erst jetzt gelesen, Danke für die Antwort!
nochnedit
Single und Integer haben beide 4 Byte - ich habs mal ausprobiert, und ne single-Variable a statt Integer benutzt, scheint zu gehen. Ist das Zufall, und so nicht praktizierbar, oder kann ich das lassen?

Gruß
Lutz böse Ifer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1875
Wohnort: D59192

BeitragVerfasst am: 18.10.2005, 08:17    Titel: Antworten mit Zitat

Hi,
single oder integer sind 32Bit, für den Speicherzugriff 4-Byte-Werte, also gleich.
Gruß
Volta
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 21.10.2005, 10:54    Titel: Antworten mit Zitat

Servus!

Funktioniert soweit, aber gibt es keine Möglichkeit, GET direkt die Little-Endians beizubringen? Ich habe mir grade eine "rboget" ("reverse byte order") geschrieben, aber gibt es da keine elegantere Methode?

Gruß
Lutz böse Ifer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 22.10.2005, 16:23    Titel: Antworten mit Zitat

Beim Knoblifax hatte ich mit IFF aus dem Commodore Amiga-Bereich seinerzeit gearbeitet. Weil der Amiga mit dem Motorola 68000 arbeitet, mussten binäre Integerzahlen auch jeweils umgekehrt werden.

Ich löste dies damals sehr einfach mit einer FUNCTION-Prozedur Umkehr$() auf Stringebene. => Mit CVI()/CVL() und MKI$()/MKL$() war es dann überhaupt kein Problem mehr, eine Zahl "umzukehren".
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
tilli



Anmeldungsdatum: 10.09.2005
Beiträge: 73

BeitragVerfasst am: 30.10.2005, 17:42    Titel: Antworten mit Zitat

Moooin Ihr Schnarchnasen!

Single sind Fließkommwerte, Integer sind Ganzzahlwerte!!!!!

Wenn die Werte größer als 256 werden kommt irgendein Müll raus, wetten? wenn nicht dann ab 65535

in einem singel kannich locker eine 5,7368 abspeichern - das ist KEIN Integer!!!

Nichts für Ungut,

CU2
Tilli
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
helium



Anmeldungsdatum: 10.09.2004
Beiträge: 397
Wohnort: Leverkusen

BeitragVerfasst am: 30.10.2005, 18:20    Titel: Antworten mit Zitat

tilli hat Folgendes geschrieben:
Moooin Ihr Schnarchnasen!

Single sind Fließkommwerte, Integer sind Ganzzahlwerte!!!!!

Wenn die Werte größer als 256 werden kommt irgendein Müll raus, wetten? wenn nicht dann ab 65535

in einem singel kannich locker eine 5,7368 abspeichern - das ist KEIN Integer!!!

Ok, wie das jetzt beim little vs. big endian-Problem hilft weiß ich nicht und was du überhaupt sagen willst auch nciht, aber sei's drum.

Integer hat einen Bereich von -2147483648 bis 2147483647. Fließkommwerte werden ganz anders dargestellt. Das selbe Bitmuster steht für eine völlig andere Zahl.
_________________
Bevor Sie aufhören sich körperlich zu betätigen sollten Sie ihren Doktor befragen. Körperliche Inaktivität ist abnormal und gefährlich für Ihre Gesundheit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 30.10.2005, 18:20    Titel: Antworten mit Zitat

Servus "tilli".

Ich bin grade am Überlegen, ob ich Mitleid mit dir haben soll, oder mich ernsthaft aufregen soll.

Ich gratuliere dir zu deiner Erkenntnis, was den Unterschied zwischen Ganzzahlen und Fließkommawerten angeht, wenn ich auch nicht ganz kapiere, was das in diesem Thread zu suchen hat.

Gruß
Lutz böse Ifer

Ps: Bist du der Gegenverein zu den "Drei ???", die "Drei !!!", oder klemmt nur deine Tastatur?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1875
Wohnort: D59192

BeitragVerfasst am: 30.10.2005, 18:28    Titel: Antworten mit Zitat

Autsch,
@tilli, den Thread nicht gelesen?
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
tilli



Anmeldungsdatum: 10.09.2005
Beiträge: 73

BeitragVerfasst am: 30.10.2005, 23:15    Titel: Antworten mit Zitat

Moin

Ich weis nicht warum Ihr auf mir Rumhackt:

Lutz ifer hat in seiner Mail
Verfasst am: 17.10.2005, 21:31

geschrieben:
Zitat:

nochnedit
Single und Integer haben beide 4 Byte - ich habs mal ausprobiert, und ne single-Variable a statt Integer benutzt, scheint zu gehen. Ist das Zufall, und so nicht praktizierbar, oder kann ich das lassen?


Volta hat darauf geantwortet:
Zitat:

BeitragVerfasst am: 18.10.2005, 07:17 Titel: Hi,
single oder integer sind 32Bit, für den Speicherzugriff 4-Byte-Werte, also gleich.


Darauf bezog sich meine Aussage!!!

nun lese ich bei Volta:
Zitat:
Verfasst am: 30.10.2005, 17:28 Titel: Autsch,
@tilli, den Thread nicht gelesen?


Seid mir nicht böse, aber nun stelle ich mir die Frage:
Wer hat nicht gelesen???

an Lutz Ifer: Es mag bei zahlen bis 1-2Bytes möglich sein, darüber ist es - sowie vom Ansatz her - absolut falsch. Außerdem ist es nicht unbedingt immer so.
Versuche bitte (einfach?) die Umsetzung mittels des ASM-codes oder ähnlichem.

so, nun allen das beste,

CU2
Tilli
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 30.10.2005, 23:35    Titel: Antworten mit Zitat

*flamewar*

tilli hat Folgendes geschrieben:
Moin

Ich weis nicht warum Ihr auf mir Rumhackt:


"rumhackt". Klein.

tilli hat Folgendes geschrieben:
Lutz ifer hat in seiner Mail


"Posting". Mail is was anderes.

tilli hat Folgendes geschrieben:
(....)"Seid mir nicht böse, aber nun stelle ich mir die Frage:
Wer hat nicht gelesen???


Du.

tilli hat Folgendes geschrieben:
an Lutz Ifer: Es mag bei zahlen bis 1-2Bytes möglich sein, darüber ist es - sowie vom Ansatz her - absolut falsch. Außerdem ist es nicht unbedingt immer so.


Mir rollen sich grade die Fußnägel auf.
Es ging niemals um die Konvertierung von integer in single-Werte. Sondern immer nur darum, dass es zwei verschiede Möglichkeiten der Speicherung von Daten auf einem geeigneten Datenträger gibt: Big-Endian, und Little-Endian. Ließ Wikipedia, wenns dich interessiert.

Single- und integer-Werte haben beide 32-Bit, daher lassen sich beide, durch Vertauschung des 1. und 4., sowie des 2. und 3. Bytes von Little- in Big-Endian und umgekehrt konvertieren.

Was mir deucht, was Du meinst, scheint ne Konvertierung der Datentypen - auf irgendeine verdammt perverse Art, die Du scheinbar nicht kapiert hast. Single- bzw. "Fließkomma"-Werte funktionieren durch das Speichern einer Ganzzahl, der Mantisse, und dem Exponent, also quasi einer Positionsangabe für das Komma, woher ja auch der Name kommt.
Solange der Exponent Null ist, lässt sich die Mantisse übrigens direkt als Integer übernehmen, nur so nebenbei.

Auch hier gilt: Wenns dich interessiert, schaus dir auf der Wikipedia an, und an sonsten: Wenn man keine Ahnung hat...


Gruß
Lutz böse Ifer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
tilli



Anmeldungsdatum: 10.09.2005
Beiträge: 73

BeitragVerfasst am: 31.10.2005, 00:24    Titel: Antworten mit Zitat

Lieber Lutz Ifer,

mir ist sehr wohl klar, wie Integer und Singel sich unterscheiden, sowohl vom Format als auch anders.

Es ging hier um eine Bemerkung, die als mögliche Lösung des Problems dargestellt wurde aber es offensichtlich nicht war - es sei denn die Erklährung ist noch irgendwo im Deteil versteckt.

Mir ging es einzig und alleindarum, dass man ein als Integer gespeichertes Quad(=4 bytes) nicht einfach als singel laden kann - und das hast du so geschrieben. (siehe mien erstes Zitat 17.10. frei: ich hab`s mal ausprobiert, scheint zu gehen... darf man das)

Ich weis beim besten willen nicht warum ich nicht ein von Euch gemachtes Zitat inhaltlich wiedergeben darf und dafür zur Sau gemacht werde. Dafür würde ich gerne eine Erklährung wissen - vielleich ist das ja so üblich ...

Ich mein`s nicht böse, aber was du MIR unterstellst kommt von DIR. War vielleicht `n Scherz oder anders gemeit - bei mir klam`s an wie oben beschriben.

BTW: rechtschreibung hat mich selten ineressiert, so auch hier. Einzig und allein der Inhalt ist für mich relevant. Besonders wenn ich schnell mal was hintippe. Das ist her ja keine Docktorarbeit.

Solltest du gemeint haben, dass du eine Union von einem Integer und einer Singel bildest, dann solltest du das hinschreiben - das Union dadrüber bezieht sich auf den Satz dadrüber - also nur auf die 4 Bytes und deren Swapmöglichkeit.
Das kann man natürlich machen, wenn es was bringt - wnngleich das Einlesen von 4 einzelbytes (als Feld) genau so gehen sollte oder zumindest nicht langsamer wäre als wenn das BS es tauscht.

Und nun hoffe ich dass Frieden einkehre. Wir wissen beide, dass es nicht möglich ist ein Integer als Singel einzulesen und sind daher vom Ergebnis nicht auseinander.

CU2
Tilli
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 31.10.2005, 00:47    Titel: Antworten mit Zitat

Servus!

tilli hat Folgendes geschrieben:
Und nun hoffe ich dass Frieden einkehre.


Ich werd mich bemühen.

"Mir ging es einzig und alleindarum, dass man ein als Integer gespeichertes Quad(=4 bytes) nicht einfach als singel laden kann - und das hast du so geschrieben." - Nein, definitiv nicht! Es ging um die Assembler-Routine von Volta.

"Ich weis beim besten willen nicht warum ich nicht ein von Euch gemachtes Zitat inhaltlich wiedergeben darf und dafür zur Sau gemacht werde. Dafür würde ich gerne eine Erklährung wissen - vielleich ist das ja so üblich ..." - "Foisch" wie man hier sagt. Es steht dir jederzeit frei, mich zu zitieren. Was das "zur Sau machen" angeht: Überdenk doch nochmal bitte deine Position, deine Wortwahl (..."Schnarchnasen"), bzw. den gesamten Kontext: Du bist volle Möhre am Thema vorbeigerauscht, und unterstellst Volta und mir, wir wären dumm. ...."Wer hat hier nicht gelesen"....

"Solltest du gemeint haben, dass du eine Union von einem Integer und einer Singel bildest,(...)" - Nein. Ich meine, was ich geschrieben habe. Wirklich, du ratterst gnadenlos am Thema vorbei, es ging NIE darum "ein Integer als Single einzulesen" oder ähnliches.

Ich legs dir nochmal ans Herz: Ließ den Thread nochmal. Du bist der einzige, der mich "so" verstanden hat - bist Du dir sicher, dass alle anderen unrecht haben?

Gruß
Lutz böse Ifer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
tilli



Anmeldungsdatum: 10.09.2005
Beiträge: 73

BeitragVerfasst am: 31.10.2005, 12:23    Titel: Antworten mit Zitat

Moin

Wenn ich lese "singel statt integer genutzt", dann ist das für mich eindeutig: die Variablendefinition wurde von integer auf single geändert.

Wir waren bei'm Einlesen von einem Datensatz, den du hattest - in Integer.

Schlussfolerung von mir: du wolltest integers als singel einlesen.

Wo steht nun der satz (tut mir leid ich finde ihn einfach nicht) der irgend etwas anderes aussagt? Ich denke dass hier wenige Leute es lesen, daher können es auch wenige missverstehen.

Wenn aber jemand das ganze überfliegt, kann er durchaus zu dem ghleichen Schluss kommen.

Speziell wenn du fragst, ob das so machbar ist, kann ich erstmal nur sagen - ne is nicht. Oder soll ich gar nichts mehr sagen und mich hier verabschieden? Das kann ja wohl nicht der Sinn einer Community sein.

Aber schluss jetzt.

CU21
Tilli
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1875
Wohnort: D59192

BeitragVerfasst am: 31.10.2005, 19:29    Titel: Antworten mit Zitat

Mensch ... @tilli,
wenn man sich so verhauen hat wie du (auch in der Wortwahl), muss man auch mal "Entschuldigung" sagen können.
Nein, da werden wieder Wortfetzen aus den vorangehenden Beiträgen, völlig aus dem Kontext gerissen,
und als Rechtfertigung für eigene Irrtümer herangezogen.
(keiner "wollte Integer als single einlesen" ;sondern "single-Variable a statt Integer benutzt")
(keiner "hat gefragt ob das machbar ist" ;sondern "scheint zu gehen ... kann ich das so lassen")

Und dann .... , spielst du den Beleidigten, das ist die Härte schlechthin..

Keiner hat dir den Mund verboten, alle haben versucht deine Irrtümer aufzuklären,
besonders Lutz böse Ifer mit einer Engelsgeduld.
tilli hat Folgendes geschrieben:
Oder soll ich gar nichts mehr sagen
... doch >>> "Entschuldigung"
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
tilli



Anmeldungsdatum: 10.09.2005
Beiträge: 73

BeitragVerfasst am: 01.11.2005, 00:03    Titel: Antworten mit Zitat

Moin

Das sollte nie ein wirklicher Angriff sein - bei mir ist sowas nicht so beleidigend gemeint, wenn ich sage "Schnarchnasen" - eher witzig ... naja hat halt nicht jeder so'ne art von Humor.

Also falls sich wirklich jemand auf den Schlips getreten gefühlt hat - sorry für die Formulierung.
Wenngleich ich das ganze definitiv immer noch nicht für eindeutig halte, aber das spielt keine Rolle - der Inhalt ist wichtig, und der ist im Nachhinein rübergekommen.

So, nun schluss der blöden Diskussion und Ende dieses Themas. Bitte.

CU2
Tilli
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz