Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » datei einlesen und dez->hex->int ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.08.2007, 09:20 Uhr
cmos



hallo,
ich lese unter windows mit CFile eine datei binär ein, da meine informationen auch darin binär gespeichert sind.
ich habe einen buffer angelegt. je nach fall lese ich 1,2, oder 4 werte ein.
meine werte sind je 2byte groß.
wenn ich einen wert einlese dann habe ich in meinem buffer z.b.
2 komsiche zeichen stehen deren ascii wert z.b. 01 und 33 ist.
lade ich meine datei im hexeditor, dann hat mein 2byte großer wert diesen hexwert 0121h.
dieser wird in den buffer gelesen. wenn ich 0121h in dezimal umrechne,kommt
289 heraus. und genau diesen wert brauche ich dann später wieder im programm.
aber im buffer habe ich 0133.
ich habe jetzt erstmal was hingemurkst, aber das sollte doch auch noch schneller und einfach gehen.


C++:
int iTemp = 0;
char cTemp[2];

sConvert.Format(_T("%x"),cTempBuffer[0]);
::strcpy(cTemp,sConvert.GetBuffer(sConvert.GetLength()));
iTemp += (atoi(cTemp)) * 100;
sConvert.Format(_T("%x"),cTempBuffer[1]);
::strcpy(cTemp,sConvert.GetBuffer(sConvert.GetLength()));
iTemp += atoi(cTemp);



Ich habe hier schon die sufu benutzt. Also ein sprintf oder dieses std:: use Zeug möchte ich nicht verwenden. und auf eine umrechnung per "hand" möchte ich auch verzichten.


danke,
cmos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.08.2007, 16:37 Uhr
mmc20
puss in boots


hi, 0x21 == 33 ! dh. du musst dein ersten byte mit 256 multiplizieren

word = ( hi_byte * 256 ) + low_byte;

da gibts sogar macros für


MSDN:

WORD MAKEWORD(
  BYTE bLow,  // low-order byte of short value
  BYTE bHigh  // high-order byte of short value
);

BYTE HIBYTE(
  WORD wValue  // value from which high-order byte is retrieved
);

BYTE LOBYTE(
  WORD wValue  // value from which low-order byte is retrieved
);




C++:
iTemp = (int)MAKEWORD( cTempBuffer[0], cTempBuffer[1] );


Dieser Post wurde am 13.08.2007 um 16:42 Uhr von mmc20 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.08.2007, 21:18 Uhr
cmos



Danke,
ich wollt grad schreiben das ich eine Lösung gefunden habe.
Das mit den LO und HIBYTE Maktro habe ich auch gefunden.
Ich habs jetzt so ähnlich. Da ich den Dateiinhalt sowieso komplett in ein char array einlese
kopier ich mir die gesuchten werte mit & - Verknüpfung und Bit Verschiebung raus.
Funktioniert und ich habe auch gleich den richtigen Zahlenwert dazu.

Vielen Dank trotzdem für di Antwort.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.08.2007, 22:19 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


bzw direkt von der File in das jeweilige format einlesen:


C++:
int intval;
file.Read(&intval, sizeof(int));

short shortval;
file.Read(&shortval, sizeof(short));



(kann sein das die parameter andersrum müssen, musste halt nachsehen)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: