[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

[c++] Reverse HEX - czy jest cos takiego?

AL

8/16/2007 4:13:00 PM

brzmi dziwnie, wiec tlumacze o co mi biega.

dostalem plik binarny - mam odczytac pare danych.
Przebilem sie juz przez format plikow generowanych na windowsa, ale
dostalem druga wersje tego samego pliku binarnego, lecz wygenerowana na
HPUX (unix 64bit dla stacji hp)

po analizie w hez editorze co tam siedzi (bo oczywiscie procedurka
napisana generuje bledy dla tego pliku), zauwazylem, ze pozycje danych
do czytania (przykladowo typu int (4 bajty)) sa w tym samym miejscu lecz
sa odwrocone kolejnosciowo.

Przykladowo w pliku z windowsa mam :

19 45 00 00 (co program odczytuje jako liczbe 17689)

w pliku z HPUX:

00 00 45 19 (co obecna procedura odczytuje jako 423952384 :)


Czy jest prosty sposob zrobic cos a'la: reverse hex ?
czyli przypadku spotkania sie z tego typu plikiem kazac mu
przeformatowac (pozamieniac kolejnosciowo) bajty i odczytac prawidlowa
wartosc?

jezyk programowania: c++


--
pozdr
Adam (AL)
TG
6 Answers

Jedrzej Dudkiewicz

8/16/2007 4:23:00 PM

0

> Czy jest prosty sposob zrobic cos a'la: reverse hex ?
> czyli przypadku spotkania sie z tego typu plikiem kazac mu
> przeformatowac (pozamieniac kolejnosciowo) bajty i odczytac prawidlowa
> wartosc?

Po pierwsze:
http://pl.cpp.wikia.com/wiki/FAQ#Zapisywanie_strukt...

Po drugie:
htons, ntohs, htonl, ntohl

Po trzecie:
http://en.wikipedia.org/wiki/Abstract_Syntax_No...
i dalsze.

JD


Marcin 'Qrczak' Kowalczyk

8/16/2007 6:50:00 PM

0

Dnia 16-08-2007, Cz o godzinie 18:12 +0200, AL napisal(a):

> w pliku z HPUX:
>
> 00 00 45 19 (co obecna procedura odczytuje jako 423952384 :)

Jesli b[0]...b[3] to bajty odczytane z pliku, to zbuduj z nich liczbe
w ten sposób:

((unsigned long)b[0] << 24)
+ ((unsigned long)b[1] << 16)
+ (b[2] << 8)
+ b[3]

--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.p...

AL

8/16/2007 10:36:00 PM

0

U?ytkownik Marcin 'Qrczak' Kowalczyk napisa3:
> Dnia 16-08-2007, Cz o godzinie 18:12 +0200, AL napisa3(a):
>
>
>>w pliku z HPUX:
>>
>>00 00 45 19 (co obecna procedura odczytuje jako 423952384 :)
>
>
> Je?li b[0]...b[3] to bajty odczytane z pliku, to zbuduj z nich liczbe
> w ten sposób:
>
> ((unsigned long)b[0] << 24)
> + ((unsigned long)b[1] << 16)
> + (b[2] << 8)
> + b[3]
>
no tak tez zaczolem (podobnie) - ale pomyslalem, ze moze sa jakies
standardowe procedury.
Nie wiem jeszcze (nie porownywalem) jak bedzie z formatem float i double
- bo z int/long to wyglada w miare logicznie.

p.s. long na 64bit ma 8 bytow dlogosci (uzywam celowo int (4B) - tak tez
podobno zostalo to zapisane w programie zrodlowym).
Dla zachowania kompatybilnosci 32bit-64bit - zamiast "long", uzywalem
"long long" (8B)

--
pozdr
Adam (AL)
TG

Jakub Debski

8/17/2007 7:33:00 AM

0

AL brought next idea :
> p.s. long na 64bit ma 8 bytow dlogosci (uzywam celowo int (4B) - tak tez
> podobno zostalo to zapisane w programie zrodlowym).
> Dla zachowania kompatybilnosci 32bit-64bit - zamiast "long", uzywalem "long
> long" (8B)

Najlepiej zdefiniuj w3asne typy, które bed? mia3y zawsze wybran? przez
Ciebie d3ugo?a np. WORD, DWORD, QWORD...
Standard C++ afair nie definiuje wystepuj?cego w C typu __int64, wiec
nie masz gwarancji co do d3ugo?ci long long.

pozdrawiam
Jakub


news_reader

8/18/2007 12:45:00 PM

0

Windows "chodzil" prawdopodobnie na Intel'u a tam jest little endian i 32
lub 64 bity
HPUX chodzi na PA-RISC a to jest big endian i 32 a od chyba wersji 2.0 64
bity.
Ktos radzil htons etc... zobacz jak pracuja i ich uzyj albo napisz cos
bardziej dostosowanego do tego co masz w tych plikach.

M


AL

8/31/2007 3:30:00 PM

0

Marcin pisze:
> Windows "chodzil" prawdopodobnie na Intel'u a tam jest little endian i 32
> lub 64 bity
> HPUX chodzi na PA-RISC a to jest big endian i 32 a od chyba wersji 2.0 64
> bity.
> Ktos radzil htons etc... zobacz jak pracuja i ich uzyj albo napisz cos
> bardziej dostosowanego do tego co masz w tych plikach.
>
> M
>
>
dzieki - dalem rade mala wstawka z asm

--
pozdr
Adam (AL)
TG