php msgpack_pack и как конвертировать в Unity3d C #

0

Интересно, почему использование msgpack не шифрует в php.

Я думаю: "{" id ": 1," v1 ":" bla "," v2 ":" foo "}" преобразуется в шестнадцатеричную строку "83 a2 69 64 01 a2 76 31 a3 62 6c 61 a2 76 32 a3 66 6f 6f "

Но результатом является "魷" id ": 1," v1 ":" bla "," v2 ":" foo "}" почему?

Это мой код ниже:

include_once "msgpack.php";
$phpVariable = array( "id"=>1, "v1"=>'bla',"v2"=> 'foo');
$json = json_encode($phpVariable,true);
echo $json."<br>";//{"id":1,"v1":"bla","v2":"foo"}
$binaryString = msgpack_pack($json);
echo $binaryString."<br>";//魷"id":1,"v1":"bla","v2":"foo"}
$base64 = base64_encode($binaryString);
echo $base64."<br>";//vnsiaWQiOjEsInYxIjoiYmxhIiwidjIiOiJmb28ifQ==

------------output-----------------------
{"id":1,"v1":"bla","v2":"foo"}
魷"id":1,"v1":"bla","v2":"foo"}
vnsiaWQiOjEsInYxIjoiYmxhIiwidjIiOiJmb28ifQ==

Если я использую только php msgpack, не используйте json_encode, но я не знаю, как преобразовать decodedBytes в Unity3d С#.

//php code
$data = (object) array('name' => 'peter', 'age' => '30');//this could be a multi array
$msgpack_response = msgpack_pack($data);
$msgpack_response = base64_encode($msgpack_response);
echo $msgpack_response;

 //Unity3d C# use msgpack 
 byte[] decodedBytes = Convert.FromBase64String (text);
 ObjectPacker packer = new ObjectPacker ();
 ??? data = packer.Unpack<???>(decodedBytes);//I don't know the type and how to convert?
Теги:
unity3d
msgpack

1 ответ

0

msg_pack - это двоичный сериализатор. Таким образом, результат msgpack_pack должен быть двоичной строкой, и бесполезно просто эхо его удивляться тому, что находится в стороне.

Так или иначе. $json variable - строка. Согласно этому типу обзора msgpack добавит префикс к вашей строке fixstr 101xxxxx 0xa0 - 0xbf.

Длина строки равна 30, поэтому 1010 0000(2) + 0000 1110(2) = 1011 1110(2) = BE(16). Итак, первый байт результата будет BE.

Затем вы пытаетесь повторить двоичную строку как многобайтную строку. Он фиксирует два первых байта как один символ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню