2014-11-07 1 views
0

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

Я думаю: «{« 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 C#.

+0

Почему вы ожидаете, что msgpack «зашифрует»? Это не библиотека шифрования. – duskwuff

+0

Чего вы хотите достичь? – sectus

+0

Я хочу использовать msgpack для сокращения байтов сообщения ответа, а ответное сообщение не может использовать base64_decode для преобразования в код очистки. Ex: 魷 «id»: 1, «v1»: «bla», «v2»: «foo» } –

ответ

0

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

В любом случае. $json variable - строка. В соответствии с этим type overview msgpack добавит префикс к вашей строке fixstr 101xxxxx 0xa0 - 0xbf.

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^