現在MessagePack-CSharpを利用してバイナリを取り扱おうとしています。(MessagePack初心者です)
やりたいこととしては下記です。
MessagePackでシリアライズされたバイナリデータから、特定の位置から指定サイズ分までの値を取得したい。
利用しているソース
https://github.com/neuecc/MessagePack-CSharp
MessagePack.Unity.1.7.3.zip
Unityで利用
例えばですが、下記のサンプルファイルを参考に説明させていただきます。
元jsonFile
{"test":[{"compact1":true,"schemddda1":0},{"compact2":true,"schemddda2":0}]}
MessagePack化したバイナリ
81 a4 74 65 73 74 92 82 a8 63 6f 6d 70 61 63 74 31 c3 aa 73 63 68 65 6d 64 64 64 61 31 00 82 a8 63 6f 6d 70 61 63 74 32 c3 aa 73 63 68 65 6d 64 64 64 61 32 00
前提条件として、{"compact2":true,"schemddda2":0}の開始アドレス(index)とサイズは知っているものとします。
質問1
その際にバイナリデータ2つめの{"compact2":true,"schemddda2":0}を取り出したいのですが、どのようにしたらよいでしょうか?
質問2
MessagePack側のメソッドで存在するのでしょうか?
試しに下記のようなReadBytesメソッドでいけると思ったのですが、エラーとなりうまく取得できませんでした。
byteArray →MessagePack化したbyte配列
byte[] test = MessagePackBinary.ReadBytes(byteArray,0, out kkk);
エラー内容
InvalidOperationException: code is invalid. code:99 format:positive fixint
MessagePack.Decoders.InvalidBytes.Read (System.Byte[] bytes, Int32 offset, System.Int32& readSize) (at Assets/Scripts/MessagePack/MessagePackBinary.cs:3732)
MessagePack.MessagePackBinary.ReadBytes (System.Byte[] bytes, Int32 offset, System.Int32& readSize) (at Assets/Scripts/MessagePack/MessagePackBinary.cs:1031)
Program.TTTT () (at Assets/Scripts/MsgPackTest.cs:100)
MsgPackTest.Start () (at Assets/Scripts/MsgPackTest.cs:19)
お手数ですが、どなたかご教授いただければ幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/30 02:31