ReadShort arbeitet nicht korrekt?
Übersicht

Mr HoppBetreff: ReadShort arbeitet nicht korrekt? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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? ![]() |
||
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 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh okay... das war mir auch neu. Dankeschön ![]() |
||
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. |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nja, ok, das mit dem Standart war mir schon irgendwie (mehr oder weniger) klar ![]() Aber das Zitat aus Wikipedia ist sehr ausschlussreich, danke ![]() |
||
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group