int to bytes()

  • Автор темы Автор темы tristram
  • Дата начала Дата начала

tristram

Guest
int to bytes()

Нужно написать функцию int2bytes(). Четко сформулировать алгоритм не могу, т.к. сам не знаю. Если б знал сам бы написал.
PHP:
word($int) == int2bytes(2,$int);
dword($int) == int2bytes(4,$int);
qword($int) == int2bytes(8,$int);
всё облазил, нашел:
PHP:
function int2bytes($bytes,$val=0)
{
 $ret = "";
 for ($i=0; $i<$bytes; $i++)
 {
   $ret = chr(($val >> ($i*8) & 0xFF)).$ret;
 }
 return $ret;
}
работает (в моем icq-клиете) но мне кажется алгоритм не совсем правильный, т.к.
int2bytes(8,0x01) == "\x00\x00\x00\x01\x00\x00\x00\x01",
а по смыслу должно быть "\x00\x00\x00\x00\x00\x00x00\x01".
Простите мне мою глупость, с такими данными пару недавно знаком.
Спасибо всем. :rolleyes:
 
SiMM
а какой формат выбирать?

-~{}~ 20.07.05 18:44:

Ну, народ, подскажите =((
 
За эти почти 5 часов ты бы мог уже во всём разобраться путём несложных экспериментов.
 
> боюсь что-нибудь не так сделаю
А в первую брачную ночь тоже на форум придёшь с вопросами?
 
> харэ прикалыватся
А по моему это ты прикалываешься. Давай посмотрим на твою фразу

> боюсь что-нибудь не так сделаю
Ну и что? Что случиться то? Земля перевернётся? Винт форматнётся? Операция pack ничего такого не делает. Тогда чего бояться?
Я понимаю если бы ты просто был не уверен в правильности своего решения - ну так ничто же его тебе не мешает опубликовать и спросить, правильно ли ты всё делаешь. Только, честно говоря, не думаю, что это имеет какой-то смысл - функция проста и примитивна - ошибиться - очень сложно. Разве что очень сильно постараться.

PS: в конце концов ни что не мешает тебе сделать тест, подставляя нужные параметры в свою старую функцию и в pack, а затем сравнивая результат.
 
tristram, так ты ничему не научишься.
PHP:
function word($w){ return pack('n',$w); }
function dword($dw){ return pack('N',$dw); }
И больше не клянчи. Нормального qword'а в PHP, насколько я понимаю, не получится.
 
какой я ууууммныыый, сам диву даюсь.
PHP:
function int2bytes($len,$int=0x00)
{
 $hexstr = dechex($int);
 if ($len === NULL) {if (strlen($hexstr) % 2) {$hexstr = "0".$hexstr;}}
 else {$hexstr = str_repeat("0",$len*2-strlen($hexstr)).$hexstr;}
 $bytes = strlen($hexstr)/2;
 $bin = "";
 for($i=0;$i<$bytes;$i++) {$bin .= chr(hexdec(substr($hexstr,$i*2,2)));}
 return $bin;
}
 
> самое то
Самое что? Намудить туеву хучу кода вместо того, чтобы воспользоваться готовой функцией? Даже первый вариант был куда лучше этой бредятины. Кроме того, ни тот, ни этот код, не может работать с с qword.
PHP:
echo int2bytes(8,1311768466852950544); // 0x1234567876543210
 
Сверху