Avatar billede barryslisk Nybegynder
19. januar 2003 - 13:42 Der er 11 kommentarer og
1 løsning

Hente int fra binær fil og lægge ind i variabel ?

Jeg har i C/C++ gemt en binær fil med en enkelt integer værdi i. Denne værdi vil jeg gerne have over i en variabel i php.
Her er mit usle forsøg:

if ($fp = fopen("file.dat", "rb"))
{
$MyVar = 7;
$MyVar = fread($fp, 4);

printf ($MyVar);
fclose($fp);
}

Hvis jeg kalder gettype() på variablen efter fread så fortæller den at det er en string. Og outputet er da også en eller anden mærkelig karakter.
Jeg er slet ikke sikker på at php har samme syn på hvad en integer er som C/C++, så muligvis kan det slet ikke lade sig gøre.

PS! Det er mit første spørgsmål, så jeg ved ikke rigtig hvordan det med point fungerer, men det ser vi på ;)
Avatar billede sostack Nybegynder
19. januar 2003 - 14:06 #1
Prøv med:
if ($fp = fopen("file.dat", "rb"))
{
$MyVar = fgets($fp, 6);
printf bindec($MyVar);
fclose($fp);
}
Avatar billede jakoba Nybegynder
19. januar 2003 - 14:06 #2
i php er der ikke nogen reel forskel på binære filer og tekstfiler. Hver byte der skrives til filen kan have enhver af 256 (2^8) værdier og de fortolkes som bogstaver allesammen.

så for at læse en fil c har skrevet som en binær fil må du selv fortolke bogstavkoderne og fortolke dem sammen til det tal du ønsker.

så tag den streg du får og lav den til byte-værdier i et array:
    $MyVar = fread($fp, 1024);
    $bytearray = array();
    for ($i=0; $i<strlen($MyVar); $i++) {
        $bytearray[] = ord( substr( $MyVar, $i, 1 ) );
    }
    dump_var( $bytearray );

ovenstående giver dig IKKE det tal du vil have. Det er blot debugning der giver os mulighed for at afklare de tvivlsspørgsmål der er i forbindelse med læsning af minære filer. som fx:
    bliver tal gemt som 1, 2, 4 eller 8 bytes?
    skrives mest betydende byte i et tal først eller sidst?
    er der formatterings-koder vi skal passe på ikke at fortolke som data?

så vent tilbage med det output du får, så kan vi nok lave en lille funktion til at læse tallet.

pointsystemet virker på den måde at nye brugere får altfor mang points smidt efter sig når de melder på, og derfor er tilbøjelige til at give alt for mange i deres første spørgsmål. 15p havde været fint her :-))

mvh JakobA
Avatar billede olebole Juniormester
20. januar 2003 - 03:22 #3
<ole>

Årrhh ... hold op, jakoba. Du fortjener zq nogle store points for at skrive funktionen, der kan læse tallet fra det output (det skulle i øvrigt ikke undre, om tallet er 40)  :D

Psssssst ... var_dump( $bytearray );  ;o)

/mvh
</bole>
Avatar billede jakoba Nybegynder
20. januar 2003 - 11:02 #4
Ups. du har ret, funktionen hedder var_dump(...), ikke dump_var(...)
( 40? hvorfor netop 40 ?  ' ', '(', '@' )
Avatar billede olebole Juniormester
20. januar 2003 - 11:51 #5
'Fejl 40' = 'Bruger-fejl' ... kender du ikke den?  :)
Avatar billede jakoba Nybegynder
20. januar 2003 - 12:23 #6
Næe, sådan en har jeg aldrig fået [helligt udtryk i ansigtet] :)
Avatar billede sostack Nybegynder
20. januar 2003 - 12:39 #7
tallet er ligefrem prportionat med længden af armene på brugeren ;-)
Avatar billede olebole Juniormester
20. januar 2003 - 12:46 #8
Multipliceret med antallet af samme - divideret med 2  :D
Avatar billede jakoba Nybegynder
20. januar 2003 - 13:29 #9
hmm, mine er snarere 80 cm. Nok er jeg gammel men så langt tilbage i evolutionsteorien synes jeg ikke jeg hører hjemme.
Avatar billede olebole Juniormester
20. januar 2003 - 13:35 #10
Nej, vi er jo nogen, der har svært ved at klappe gællerne i  *ROTFLMAO*
Avatar billede barryslisk Nybegynder
21. januar 2003 - 08:17 #11
Jakoba...Jeg løste problemet ved hjælp af ord(), så hvis du vil have nogle point så skal du så vidt jeg har forstået lige lave et svar istedet for en kommentar.

Tak for hjælpen.
Avatar billede jakoba Nybegynder
21. januar 2003 - 13:08 #12
fint nok :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester