php to unity如何传递byte []或二进制数据?

时间:2013-02-23 10:23:20

标签: c# php unity3d

我正在开发一个C#unity项目。 我有一些对象,我想保存在PHP服务器上。

所以首先我将它们序列化为json,然后压缩它们并将它们上传到服务器, 将其保存在db上(作为二进制文件,字符串是否足够好?)。

现在我想要获取统一数据。 php应该如何返回值?团结应该如何接受呢?

我将处理解压缩,并反序列化为json。 (对json使用jsonfx并使用c#本机编写的compress方法) 这部分工作正常。

我只需要能够在每个平台上接收相同的字节[]。

它应该看起来像这样

C# - 上传数据(psuedo C#)//这部分效果很好

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

C# - 获取数据(需要帮助)

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

PHP - 将数据发送回客户端(这里需要帮助) ...

$myvarbackfromthedb =.
echo $myoutput

当$ myoutput是二进制数据或byte []?

时,我该如何做同样的事情

感谢您的帮助!

更新

所以这样做的动机是保存压缩返回的byte []。我最终,将其移动到base64字符串,然后将其作为字符串传递给php,然后作为字符串传递给数据库。

1 个答案:

答案 0 :(得分: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']);