Autor Zpráva
Jakuje
Profil
Obávám se že to tu ještě nebylo. Ale já vždycky přijdu s nějakou kravinou, kterou nikdo jiný nedělá (a nebo na ni jenom nemůžu přijít) :)

Mám čísla v hexadecimálním tvaru a potřebuju je zapsat do souboru. Když je převedu na znaky, tak se to zesere.
Nějak mě aktuálně vůbec nenapadá jak to udělat.
Má někdo radu?
Mike8748
Profil
Jakuje
jak to prevadis? a v jakym formatu to chces zapisovat? textove? binarne?
Jakuje
Profil
No zatím zapisuju textově normální řetězce, které do toho souboru také budou patřit.

V této části php zase nemám takových zkušeností, takže používám funkci file_put_contents()

cílový soubor by měl být .pdb - Palm DataBase, je kódován šestnástkově (hexadecimálně v pspadu zobrazím, doufám že je to šestnástkově) a je tam potřeba speciální hlavička.
Majkl578
Profil
hexa = šest, hexadecimální = šestnáctkový
kdyby se nezobrazil sestnactkove, neni to hexa kod, ale treba oktalovy
Jakuje
Profil
Majkl578
Tak jasně ... tohle jsem fakt slyšet nepotřeboval.
Jakuje
Profil
Asi by byl nejlepší ten binární zápis, ale nejsem si jistej jak to kombinovat s normálním textovým ...
BetaCam
Profil
Jakuje
Mám čísla v hexadecimálním tvaru a potřebuju je zapsat do souboru. Když je převedu na znaky, tak se to zesere.

1) Definuj slovo "zesere".
2) Jak ty čísla znaky převádíš.
3) Dej sem modelovej příklad "zesranýho" převodu.
Mike8748
Profil
Jakuje
pak tedy php manual, tam si najdes funkci pack() a prectes si o ni neco
Jakuje
Profil
1) Definuj slovo "zesere".
Nevypisuje správné hexadecimální hodnoty (což je asi logické)
2) Jak ty čísla znaky převádíš.
mám hexdec číslo, např. A4 a přeženu přes něj funkci hexdec() a chr(), nj. asi je to kravina, ale bylo to první co mě napadlo.
3) Dej sem modelovej příklad "zesranýho" převodu.
Modelový příklad:
$header = hex2char("3030204D6574612D4442"); //číslo redakčně zkráceno

function hex2char($hex){
  $char = str_split($hex, 2);
  $i = 0;
  $out = "";
  while( !empty($char[$i]) ){
    $out .= chr(dechex($char[$i]));
    $i++;
  }
  return $out;
}


Mike8748
podívám se na to.
BetaCam
Profil
Jakuje

Hezké a jak by měl vypadat return kdyby to převádělo správně. :)
Jakuje
Profil
Jakuje
Hezké a jak by měl vypadat return kdyby to převádělo správně. :)
Netuším ... :-) Mě jde o to ty data natlačit 16tkově do souboru ... asi bude potřeba udělat to binárně, takže to asi převést na binár. Žeby to šlo pomocí té funkce pack()?
BetaCam
Profil
Jakuje
Netuším ... :-) Mě jde o to ty data natlačit 16tkově do souboru ...

Z tebe to leze jak z chlupaté deky. Jaké data potřebuješ dostat do souboru. Já z toho tvého vyprávění nechápu co chceš vlastně převádět z čeho do čeho.

Říkáš, že máš hexa a potřebuješ to dostat do souboru, ale jinde zase říkáš :

Mě jde o to ty data natlačit 16tkově do souboru ...

Tak se rozhodni v čem máš zdrojové data a jaké mají být finálně protože takhle to opravdu nechápu.
BetaCam
Profil
Jakuje
Nebo já to řeknu jinak sice vím, že ti s velkou pravděpodobností de o funkce

bin2hex();
hex2bin();


Z toho bin2hex je nativně v PHP a hex2bin není a dala by se zapsat asi takto :
function hex2bin($s){
	$out = '';
	$segments = str_split($s, 2);
	foreach($segments as $segment){ $out .= chr(hexdec($segment)); }
	return $out;
}


Ale opravdu jen hádám z koule.
Davex
Profil
function hex2bin($hex)
{
  return pack('H*',$hex);
}
BetaCam
Profil
Davex

Ano nebo tvá rychlejší varianta.
nightfish
Profil
kolega zadavatel by si měl v prvé řadě ujasnit, jak vlastně fungují různé módy přístupu k souborům (textový, binární) a také jaké různé číselné soustavy existují, a jakým způsobem se tyto soustavy používají k zaznamenávání znaků (jakože obvykle nepoužívají)

binární data jsou posloupnost znaků s ordinální hodnotou 0-255... jelikož ne všechny tyto znaky lze vypsat na obrazovku/vytisknout, používají se různé způsoby zápisu - např. posloupnost čísel 0-255, popřípadě pro ušetření místa zápis třeba v hexadecimální soustavě (výhodou je, že každý znak ze souboru zabere při výpisu právě 2 znaky)

pokud máš na vstupu posloupnost zápisů znaků hexadecimální soustavě, a na výstupu potřebuješ binární data, použij pack
pokud máš na vstupu binární data, zapiš na výstup taktéž binární data a jseš v pohodě
Jakuje
Profil
Tak něco jsem si už teda trochu ujasnil ... řekněme že nějaký převod již fungovat bude. Ale teď mám problém se zápisem do souboru:
php6 ještě není a file_put_contents s flag TEXT_BINARY nefunguje
asi je potřeba použít fopen s módem řekněme wb. Ale nějak netuším jak tam zapsat ty binární data.

Má někdo rady?
Jakuje
Profil
Tak se omlouvám. Už jsem to napsal a normální zápis frwite po zabalení funkcí pack funguje.
Tak děkuji všem za rady.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0