Хобрук: Ваш путь к мастерству в программировании

php в единство, как передать byte[] или двоичные данные?

я работаю над проектом единства С#. у меня есть некоторые объекты, которые я хотел бы сохранить на сервере php.

поэтому сначала я сериализую их в json, затем сжимаю и загружаю на сервер, который сохраняет их в БД (как двоичный файл, достаточно ли хороша строка?).

теперь я хочу вернуть эти данные о единстве. как php должен вернуть значение? и как единство должно получить его?

я займусь распаковкой и десериализацией в json. (используя jsonfx для json и используя метод сжатия, изначально написанный на С#), эта часть работает нормально.

мне нужно только иметь возможность получать один и тот же байт [] на каждой платформе.

это должно выглядеть примерно так

C# - для загрузки данных (псевдо C#)//эта часть работает хорошо

wwwform myform= new wwwform ()
byte[] mybytearr = ...
wwwform.addbinary ($mybytearr);
WWW myw=    new www (url,myform)

С# - для получения данных (здесь нужна помощь)

WWW www = > new www (url,formdata)
myinput =www.text;

PHP - отправить данные обратно клиенту (и здесь нужна помощь)...

$myvarbackfromthedb =.
echo $myoutput

как мне сделать то же самое, когда $myoutput представляет собой двоичные данные или байт []?

Спасибо за вашу помощь!

Обновить:

поэтому мотивация для этого заключалась в том, чтобы сохранить байт [], который вернул сжатие. В итоге я переместил ее в строку base64, а затем передал ее как строку в php, а затем как строку в базу данных.

23.02.2013

  • Может быть, вам поможет json_decode()? 23.02.2013
  • нет, я в порядке с частью json, просто нужно получить байт [] в единстве после этого я в порядке. 23.02.2013
  • Можете ли вы показать бит вашей двоичной строки? 23.02.2013
  • прямо из редактора {зданий:[{core_id:{GameEngineName:basic-launcher-2.0,�%Typ@%DefenseB�V scenename@B1},`eloc@fx:17,y:1,z:0}� радар:нулевой,л.с.:100},{�Y�2}����-2,��-34}�!�p�3����12��8}�w�4���� 23.02.2013
  • @tansgrs -› хорошо, но как мне вернуть его клиенту, просто эхо $myvarin64base? а затем просто прочитать www.text на стороне клиента С# Unity? 23.02.2013
  • Нет, это не кодировка base64. Это строка в кодировке JSON, а вот с кодировкой беда. Вы можете попробовать получить данные, вот так $str = 'here your enceoded string'; $str = iconv('from what charset', 'to what charset', $str); print_r(json_decode($str, true)); 23.02.2013
  • спасибо, я не хочу, чтобы php возвращал гигантскую строку json, я хочу, чтобы он возвращал тот же bytearr [], который он отправил для начала. 23.02.2013
  • Как вы создаете эту строку JSON? 23.02.2013
  • Тег Unity предназначен для Microsoft Unity. Пожалуйста, не злоупотребляйте им. 08.03.2013

Ответы:


1

Начнем с некоторых двоичных данных:

$binary = file_get_contents('/tmp/foo');

Или, может быть, для целей тестирования:

$binary = join(array_map('chr', range(0, 127)));

Оба являются произвольными двоичными строками. Вы можете вывести из них допустимую строку JSON, используя:

echo json_encode(array('foo' => $binary));

Это даст вам что-то вроде этого:

{"foo":"\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-.\/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"}

Это допустимое JSON-представление этих двоичных данных. Любой, кто декодирует эти данные, получит обратно двоичное значение. Однако вы можете захотеть закодировать его немного более эффективно, например, используя кодировку Base 64:

echo json_encode(array('foo' => base64_encode($binary)));

Это даст вам:

{"foo":"AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn8="}

Теперь получатель просто должен декодировать его снова. В PHP это будет выглядеть так:

$data = json_decode($json, true);
$data['foo'] = base64_decode($data['foo']);
23.02.2013
  • спасибо, я проверю это, может занять некоторое время. чтобы убедиться, что вы предлагаете обернуть двоичные данные как json на обратном пути к клиенту С#, верно? 23.02.2013
  • Как именно вы это сделаете, зависит от вас. Вы можете отправить двоичные данные как часть ответа JSON, или вы можете отправить данные непосредственно в двоичном виде, не окружая дополнительные данные, вы можете использовать HTTP-ответ, состоящий из нескольких частей... их так много способы сделать это, это зависит от того, что лучше для вашей ситуации и что проще всего использовать для вашего клиента. Я показал, как отправить его в формате JSON, что является одним из простых способов сделать это. 23.02.2013
  • как получатель получит эти $data['foo']? будет ли php эхо $data, а c# получит его как текст и продолжить оттуда? 23.02.2013
  • Новые материалы

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...