Avatar billede snigeren22 Nybegynder
14. juli 2004 - 09:55 Der er 10 kommentarer

Indsættelse af hex i fil

Hey. Et spørgsmål med et sikkert let svar til.

Jeg skal oprette en fil som består af en række bestemte chars - beskrevet i hex.

Jeg sammensætter strengen jeg gemmer i filen ved feks.:
"\x00\x20\x0a" osv.
Problemet er dog imidlertidigt at hver gang at jeg indsætter 0A, altså \x0a, så indsætter den automatisk \x0d foran! Hvorfor det?

Det er som at \x0a som streng bliver evalueret på en eller anden mærkelig måde.
Avatar billede snigeren22 Nybegynder
14. juli 2004 - 10:03 #1
Forøvrigt anvender jeg fputs til at gemme strengen i filen, hvis det skulle have nogen betydning?
Avatar billede googolplex Novice
14. juli 2004 - 10:04 #2
Prøv at tjek din php.ini (eller php info), magic_quotes_runtime er sikkert sat til on.
Avatar billede erikjacobsen Ekspert
14. juli 2004 - 10:09 #3
Det skulle ikke ske. Er du sikker på at du ikke får sat noget på når du kigger på filen

[ej@dmu-stud public_html]$ od -t x1 hhh
0000000 00 20 0a
0000003
[ej@dmu-stud public_html]$ cat hex.php
<?

  $a="\x00\x20\x0a";

  $f=fopen("hhh","w");
  fwrite($f,$a);
  fclose($f);

?>


[ej@dmu-stud public_html]$ php hex.php


[ej@dmu-stud public_html]$ od -t x1 hhh
0000000 00 20 0a
0000003
[ej@dmu-stud public_html]$ ls -ls hhh
  4 -rw-rw-r--    1 ej      ej              3 Jul 14 10:16 hhh
[ej@dmu-stud public_html]$
Avatar billede snigeren22 Nybegynder
14. juli 2004 - 10:17 #4
Nej, den resulterende fil som jeg åbner, åbner jeg i en hexeditor og der kan jeg se at den blot indsætter et ekstra tegn før 0A, nemlig 0D, hvilket betyder at filen bliver een char for langt, hvilket modtager interfacet ikke forstår.

Jow, Magic Quotes er slået til, men jeg har ikke specielt lyst til at ændre i min php-opsætning. Man må da kunne omgå det på en anden måde?
Avatar billede erikjacobsen Ekspert
14. juli 2004 - 10:23 #5
Kunne det tænkes du kører det på windows? Så har du selv bedt om mere bøvl.
Men du kan sikkert rette op på det med:

$f=fopen("hhh","wb");
Avatar billede snigeren22 Nybegynder
14. juli 2004 - 10:45 #6
Jeg bruger allerede denne kommando... desværre.
Man må formode at problemstillingen ligger i at 0A svarer til newline eller lignende
Avatar billede erikjacobsen Ekspert
14. juli 2004 - 10:51 #7
Jeg kan ikke genskabe dit problem. Jeg fandt sørme en windows maskine, og
uden det "b" giver det en fil på 4 bytes. Med "b" giver det een på 3 bytes som den skal.
Avatar billede snigeren22 Nybegynder
14. juli 2004 - 11:18 #8
Jeg har løst problemet ved at ændre char'en til noget andet. Men du får pointene alligevel for din tid :D
Avatar billede sostack Nybegynder
14. juli 2004 - 11:20 #9
Jeg har lige testet på windows, og fundet ud af følgende:
PHP skriver det korrekte til filen, når man anvender $f=fopen("hhh","wb");
Problemet ligger i den editor man efterfølgende kigger i filen med.
UltraEdit 9.20 spørger om man vil konvertere filen til "DOS-format" (sikkert ANSI).
Hvis man svarer "ja" her til ser man fejlen, hvis man svarer "nej", ser man det forventede.

//sostack
Avatar billede erikjacobsen Ekspert
14. juli 2004 - 11:42 #10
Ellers tak, jeg samler ikke på point. Og jeg ville egentlig hellere bare have løst dit problem ;)
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