Gå til innhold

Lese inn 32-bits unsigned int (fra fil) til short


Anbefalte innlegg

Hei!

 

Jeg holder på å skrive et program (i Python) som dekoder et binært filformat. Jeg har et C++-program å se på.

 

C++-programmet leser fila i ord på fire bytes (som unsigned int). Dette er stort sett forståelig og fint, men et sted i programmet så tar den en slik byte og lagrer den til et array av type "Short_t" (2 byte signed int). Dette skjer ved en implisitt konvertering:

m_n_pedestal[strip]  = *(dataPointer);

hvor dataPointer er et objekt av en fancy klasse for random-access i en fil, og operator* i dataPointer gir deg en unsigned int som er det ordet dataPointer peker på.

 

m_n_pedestal er definert slik:

Short_t m_n_pedestal[NUM_STRIPS];

 

Hva skjer? Ser den bare på de første 2 bytene, og leser de som en short? Hva skjer med fortegnet?

Endret av kyrsjo
Lenke til kommentar
Videoannonse
Annonse

Den opprinnelige koden gjør det, men jeg vet ikke hvordan den kompileres.

 

Uansett: Tenkte som så at det er little-endian data til å begynne med, så jeg leser de to første bytene i fire-byte ordet. Det så ut til å gå bra, og gav resultater som ikke så alt for gale ut. De to siste bytene så ut til å alltid være 0x0000, noe som ikke gav så veldig mye mening.

 

Den endelige python-koden blei dermed:

		print "\t\t\t\t N-side:"
	stripNum = 0
	print "\t\t\t\t\t | strip | pedestal | noise | threshold |"
	while pos < 3*BAT_strips+1:
		stripCalib = dataData[pos*4:(pos+3)*4]
		pedestal   = struct.unpack('<h', stripCalib[0:2])[0]
		noise	  = struct.unpack('<h', stripCalib[4:6])[0]
		threshold  = struct.unpack('<h', stripCalib[8:10])[0]

		print "\t\t\t\t\t |   %03d |   %06d |   %03d |	  %04d |" \
			  % (stripNum, pedestal, noise, threshold)

		stripNum += 1
		pos += 3

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...