Meandry PHP
: 28 wrz 2007, 10:18
tzn02 12 17 00
teraz to trzeba zapisac na ASCII i niby jest OK ale kiedy trafia sie cyfry powyzej 128 zapis do pliku znakow ascii cos miesza sie.
Kod: Zaznacz cały
chr($a)tzn02 12 17 00
teraz to trzeba zapisac na ASCII i niby jest OK ale kiedy trafia sie cyfry powyzej 128 zapis do pliku znakow ascii cos miesza sie.
Kod: Zaznacz cały
chr($a)Kod: Zaznacz cały
565295 247969
te cyfry zamienia sie na HEX wiec mozemy dostac np
03C8A1 wiec po podzileniu ich na dwojki mamy 3 bajty
03 C8 A1 czwarty bajt uzupelniam 00
uzywam funkcji hexdec aby zamienic ja na dzisietna cyfre i tu pozniej rozne stosowalem techniki:
chr($a) lub sprintf('%c',$a)
Kod: Zaznacz cały
wspolrzedna 587833 po zamianie ma na hex 08F839 i po odwroceniu bajtow i zapisaniu w pliku
sprintf('%c%c%c%c%c%c',hexdec(39),hexdec(F8),hexdec(08),0,0);
musi byc:
39 F8 08 00 00 4F gdzie 4F litera O od nazwy nastepnego pola (nazwa waypoint)
po obejrzeniu pliku mamy
39 F8 08 00 96 00 4F
pojawil znak o kodzie HEX 96
rozbijanie tego na chr i sprintf troche niepotrzebnie komplikuje sprawę. poniższy kod zapisuje te dwie współrzędne tak jak trzeba binarnie do pliku i wydaje mi się, że o wiele prościej:sp2ong pisze:Troche opisze problem wiecej. Otoz format pliku UAM jest binarny, ma swoj naglowek i poszczegolne rekordy maja swoja dl. miedzy innymi wspolrzedne w ukl 1992 zapisywane sa w 8 bajtach tzn 4 bajty na X i 4 bajty na Y. Wspolrzedne w ukladzie 1992 maja wyglad npKod: Zaznacz cały
565295 247969 te cyfry zamienia sie na HEX wiec mozemy dostac np 03C8A1 wiec po podzileniu ich na dwojki mamy 3 bajty 03 C8 A1 czwarty bajt uzupelniam 00 uzywam funkcji hexdec aby zamienic ja na dzisietna cyfre i tu pozniej rozne stosowalem techniki: chr($a) lub sprintf('%c',$a)
Kod: Zaznacz cały
$file = fopen("test.bin", "wb");
$x = 565295;
$y = 247969;
fwrite($file, pack('L', $x), 4);
fwrite($file, pack('L', $y), 4);
fclose($file);
Wiem ;>sp2ong pisze:Zgadza sie jest OK
cóż. z czubka głowy nic nie wiem, jak mawiają hamerykanie. musiałbym zobaczyć kod, dane wejściowe i tak dalej :]sp2ong pisze:wstawia dodatkwe 0 pomiedzy wspolrzednymi jest
F8 20 07 00 00 96 BC 08 00
zamiast F8 20 07 00 96 BC 08 00
no 4 uzylem tak jak podales.angelo pisze:cóż. z czubka głowy nic nie wiem, jak mawiają hamerykanie. musiałbym zobaczyć kod, dane wejściowe i tak dalej :]sp2ong pisze:wstawia dodatkwe 0 pomiedzy wspolrzednymi jest
F8 20 07 00 00 96 BC 08 00
zamiast F8 20 07 00 96 BC 08 00
jaki jest $x, $y, $thisline1 jak wygląda? jedno mogę Ci powiedzieć od razu, że nie ma sensu przekazywać 4 do f-cji pack.
ee... blefujesz ;] 4 użyłem, jako trzeciego parametru do "fwrite". jako ilości bajtów do zapisania.sp2ong pisze:no 4 uzylem tak jak podales.
Kod: Zaznacz cały
Warning: pack(): 1 arguments unused in ... on line ...
Kod: Zaznacz cały
$uamlatlon="{lat}{lon}";
$thisline1=$uamlatlon;
$x= 467192;
$y= 572566;
$thisline1 = mb_ereg_replace('{lat}',pack('L',$y),$thisline1);
$thisline1 = mb_ereg_replace('{lon}',pack('L',$x),$thisline1);
$file = fopen("test.bin", "wb");
fwrite($file, $thisline1);
fclose($file);
Kod: Zaznacz cały
96 BC 08 00 F8 20 07 00takie coś mi przyszło do głowy. jak telnetem ściągam ten plik co podałeś (OP061B) to wygląda jakby był generowany dobrze:angelo pisze:wygląda jakby bład był gdzie indziej.
Kod: Zaznacz cały
BB 22 D5 3F 01 F8 20 96 4F 50 30 ....