C++ char [4] to int

Programovacie jazyky, rady, poradňa...
ChallengerQo
Expert
Expert
Používateľov profilový obrázok
Príspevky: 183
Registrovaný: 05 júl 2009, 17:08
Bydlisko: Kodaň

C++ char [4] to int

Príspevok od používateľa ChallengerQo »

Zdravím,
Potrebujem načítavať binárny súbor a interpretovať ho. Keď som na pozícii, kde viem, že mám 4 bajty, kt. majú byť int, tak ich načítam nasledovne

Kód: Vybrať všetko

int charToInt ( char * input) {
	int number = 0;

//    //little_endian
	for (int n = 4; n >= 0; n--)
      number = (number << 8) + word[n];

 return number;
}

...

char buffer[5];
buffer[4] = '\0';  
inFile.read (buffer, 4);
int number = BINtoCSV_charToInt(buffer);
header_total_bytes = number;
Pre menšie čísla to funguje, ale napríklad keď načítavam 1000 (v hexeditore mi to zobrazuje ako E8 03 00 00), tak mi to namiesto 1000 načíta 744. Zasekol som sa a neviem s tým pohnúť.. Niekto nejaký nápad?
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: C++ char [4] to int

Príspevok od používateľa BX »

Robíš to pre 4 byty, tak prečo ideš od 4 do 0? To je celkom 5.

Každopádne takto by som to veru nerobil. Ak vieš, že môžeš očakávať int, načítaj int. Buď cez fscanf, alebo aj toto by malo fungovať:

Kód: Vybrať všetko

int number;
inFile.read ((char*)&number, 4);
Alebo kľudne použi memcpy. Možností je veľa a tá tvoja je najzložitejšia :)

Okrem toho, ak je štruktúra bin. súboru pevne daná, zvykne sa to robiť cez štruktúry a stačí tak na to jediné prečítanie súboru.
ChallengerQo
Expert
Expert
Používateľov profilový obrázok
Príspevky: 183
Registrovaný: 05 júl 2009, 17:08
Bydlisko: Kodaň

Re: C++ char [4] to int

Príspevok od používateľa ChallengerQo »

Dík, toto mi vôbec nenapadlo..
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: C++ char [4] to int

Príspevok od používateľa pcsiete »

Ale keby to náhodou niekto potreboval:

Kód: Vybrať všetko

#include <stdint.h>
....
int8_t array[4];            
....
int32_t val = *((int32_t*)array);
Napísať odpoveď