ReadShort arbeitet nicht korrekt?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

Mr Hopp

Betreff: ReadShort arbeitet nicht korrekt?

BeitragSa, Dez 29, 2007 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich habe wo einen Short-Wert ausgelesen und musste feststellen, dass dieser Wert nicht korrekt ist. Daraufhin habe ich ihn in 2 Bytes zerlegt, die einzelnen Bytes in Binärzahlen umgewandelt, die Binärzahlen aneinander gereiht und daraus wieder eine normale Zahl geformt. Jaa darauf bin ich mehr versehentlich gekommen Laughing Aber dann hat der Wert gestimmt.

Nun also die Frage: Warum liefert die Funktion ReadShort "falsche" Werte?

Edit: Grade mal nen sehr seltsamen Fall entdeckt: Ein Short bestehend aus den Bytes 0 und 4 soll 1024 sein
Edit2: Wie dem auch sei:
Code: [AUSKLAPPEN]
SuperStrict

WriteStdout BytesToShort(123,45)

Function BytesToShort:Short(byte1:Byte,byte2:Byte)
   Local tbin$
   Local i:Short
   Local result:Short
   Local letters:Short

   tbin$=Right(Bin(byte1),8)+Right(Bin(byte2),8)
   letters=Len(tbin$)

   For i=1 To letters
      If Mid(tbin$,i,1)<>"1" And Mid(tbin$,i,1)<>"0" Then Return False   
   Next
   
   For i=1 To letters
      result=result+(Int(Mid$(tbin$,i,1)) Shl (letters-i))
   Next
   
   Return result
End Function

BladeRunner

Moderator

BeitragSa, Dez 29, 2007 23:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Es kommt ganz drauf an ob der Wert little Endian oder Big endian gespeichert wurde, sprich, ob das höherwertige oder das niederwertige byte zuerst geschrieben wurde.
1024 = $0400 -> 4*256
das kann nun so abgelegt werden:
$04 $00 (big endian)
oder so:
$00 $04 (Little endian)

Beides hat seine Richtigkeit, der Auslesende muss halt nur wissen in welchem Format es in die Datei geschrieben wurde.
Intel-Prozessoren, sprich der normale Windows oder Linux-PC, verwendet in der Regel little endian. Mac war big endian, aber auh hier gibt es ja mittlerweile intel-Prozzis.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

#Reaper

Newsposter

BeitragSo, Dez 30, 2007 0:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch wenns OT ist: Welchen Sinn hat little Endian? Big Endian sieht irgendwie.. logischer aus, oder seh ich da was falsch?
Und ich hoffe, AMD-Prozessoren machen das dann auch ganz normal, oder? Wink
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

BladeRunner

Moderator

BeitragSo, Dez 30, 2007 1:01
Antworten mit Zitat
Benutzer-Profile anzeigen
AMD orientiert sich an der Intel-Architektur weil das Standard ist. Ansonsten müsste man ja jedes Programm für windows in 2 Versionen haben, einmal für AMD, einmal für Intel. Nicht sehr sinnig, nicht wahr ?

Zu den Vorteilen ein Zitst aus der Wikipedia:
Zitat:
Vorteile des Little-Endian-Formats

Um auf einer Little-Endian-Maschine eine Zwei-Byte-Zahl in eine Vier-Byte-Zahl zu verwandeln, müssen lediglich zwei mit Null gefüllte Byte am Ende angefügt werden, ohne dass sich die Speicheradresse ändert. Auf einer Big-Endian-Maschine muss der Wert zuvor im Speicher um zwei Byte verschoben werden. Auch die umgekehrte Umwandlung gestaltet sich einfacher. Auf einer Little-Endian-Maschine werden einfach die höherwertigen Byte verworfen, ohne dass sich die Speicheradresse ändert. In der Little-Endian-Form kann unabhängig von der Anzahl der Ziffern der Zahl effizient geprüft werden, ob sie gerade oder ungerade ist: Nur das erste (unterste) Byte ist zu lesen. Hier steht im niedrigsten Bit die Parität. Die restlichen Byte können übersprungen werden, egal, ob die Zahl mit 1, 2 oder 4 Byte Länge definiert ist.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Mr Hopp

BeitragSo, Dez 30, 2007 1:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh okay... das war mir auch neu. Dankeschön Smile Hab mir jetzt 2 Funktionen geschrieben, die so ähnlich wie die, die ich oben gepostet habe, funktionieren... so gehts auch
Zitat:
Wie poste ich falsch?

Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann.
 

#Reaper

Newsposter

BeitragSo, Dez 30, 2007 1:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Nja, ok, das mit dem Standart war mir schon irgendwie (mehr oder weniger) klar Wink

Aber das Zitat aus Wikipedia ist sehr ausschlussreich, danke Smile
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group