8-байтное целое

Sancho

Новичок
8-байтное целое

Доброго времени суток!

Есть ли возможность каким-либо образом обработать 8-байтное целое? Конкретно - стоит задача, например, побить его по байтам, то есть разложить в виде 8 отдельных байтов. Есть ли какая-то возможность реализовать подобное средствами PHP?
 

DiMA

php.spb.ru
Команда форума
MySQL поддерживает BIGINT, соотв. читаем как строку и делаем че хотим
 

Sancho

Новичок
Есть специфический текстовый протокол обмена. По этому протоколу надо передать 8-байтовое целое как 8 отдельных байтов, к примеру, {233 128 23 26 13 168 0 0}, потому что распознать 8-байтовое целое принимающая сторона не в состоянии, а принять 8 байт и потом собрать их обратно в целое может. Готов согласиться с тем, что эта реализация не слишком прямая, но реализовано именно так:) Соответственно, надо обработать введенное пользователем значение и передать его по протоколу именно в таком формате.

P.S. А что значит фраза "для этого вообще ничего не нужно"?

-~{}~ 26.08.09 17:38:

Автор оригинала: DiMA
MySQL поддерживает BIGINT, соотв. читаем как строку и делаем че хотим
Это понятно, проблема в том, что в данном случае не используется MySQL:) Да и все равно, даже прочитав из БД 8-байтовое число как строку, как потом можно было бы привести его к целому типу и побить побайтово?
 

dimagolov

Новичок
Sancho, изначально, как у ТЕБЯ это 8-байтовое число представлено?
 

Sancho

Новичок
Автор оригинала: dimagolov
Sancho, изначально, как у ТЕБЯ это 8-байтовое число представлено?
Изначально - это строка-"число", которая приходит от пользователя (которую я пытаюсь отправить принимающей стороне) либо строка байтов, разделенных пробелами, которые мне приходят от той же принимающей стороны (которая на этот раз выступает в роли отправляющей стороны). То есть, грубо говоря, я получаю набор из 8 байтов, преобразую его в 8-байтовое целое, которое потом отображаю пользователю в инпуте, пользователь это число меняет, возвращает мне в форме строки, которую мне надо интерпретировать как 8-байтовое целое, разложить по байтам и отправить в форме той же строки байтов, разделенных пробелами, обратно. Это то, как я хочу, чтобы оно работало:) Это реально?
 

rotoZOOM

ACM maniac
Sancho для преобразования числа из одной системы счисления в другую (намекаю из 10-ричной в 256-ричную), тебе нужны только 2 операции: деление и остаток от деления. Обе они реализованы в bc, о чем тебе говорил в первом посте димаголов.
 

Sancho

Новичок
Автор оригинала: rotoZOOM
Sancho для преобразования числа из одной системы счисления в другую (намекаю из 10-ричной в 256-ричную), тебе нужны только 2 операции: деление и остаток от деления. Обе они реализованы в bc, о чем тебе говорил в первом посте димаголов.
Понял, да я и не спорю, просто по его (димаголов'а) просьбе уточнял свою ситуацию. Буду копать bc, спасибо:)
 

SiMM

Новичок
> для преобразования числа из одной системы счисления в другую
BC не нужен вообще.
[m]base_convert[/m]
 

rotoZOOM

ACM maniac
Both frombase and tobase have to be between 2 and 36, inclusive.
Все таки нужен.

-~{}~ 27.08.09 12:29:

Нет, ну конечно он может преобразовать сначала в 16ричную систему счисления, а потом брать из строки по два символа и преобразовывать их уже в 256ричную.
 

SiMM

Новичок
> конечно он может преобразовать сначала в 16ричную систему счисления, а потом
воспользоваться [m]pack[/m]
Хотя я, похоже, ошибся.
PHP:
echo base_convert(str_repeat('FF',8),16,10); // 18446744073709552046
Результат не может быть чётным числом.
base_convert() may lose precision on large numbers due to properties related to the internal "double" or "float" type used. Please see the Floating point numbers section in the manual for more specific information and limitations.
Хотя, полагаю, можно было это обойти.
 
Сверху