C# protobuf数据类型

邻家大哥呀 2018-01-10 03:06:27
新手,今天碰到一个protobuf 让我很是难受,首先对其基本特点不是很了解。比如一个字符串经过protobuf之后,打印出来是以二进制的形式输出还是以字符串的形式呢。
如图:

如 上图所示代码运行时,报出这个错误
FormatException: Input string was not in the correct format
System.Int16.Parse (System.String s) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Int16.cs:209)
System.Convert.ToInt16 (System.String value) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Convert.cs:1114)
tpgm.NetHttp.HttpSend[LoginSendBuf,LoginRecvBuf] (System.String url, tpgm.LoginSendBuf st, tpgm.LoginRecvBuf rt) (at Assets/Scripts/NetHttp.cs:81)
PomeloDemoLayer.onUiEventWxLogin () (at Assets/Resources/libs/PomeloDemoLayer.cs:59)
IORead.Btn_Test () (at Assets/Scripts/IORead.cs:39)
IORead.<Start>m__0 () (at Assets/Scripts/IORead.cs:14)
UnityEngine.Events.InvokableCall.Invoke (System.Object[] args) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:154)
UnityEngine.Events.InvokableCallList.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:637)
UnityEngine.Events.UnityEventBase.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:773)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:52)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:35)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:44)
UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.EventSystem:Update()
麻烦大神百忙之中看下哈,谢谢
...全文
982 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2018-01-13
  • 打赏
  • 举报
回复
不太清楚你打算干什么 既然你已经生成了 protobuf 数据流,那就发出去就是了(通讯中使用的数据类型都是 byte[]) 如果你是想看看他是怎么编码的: 你的 byte[] 按 16进制表示成 08 15 18 00 3a 6 7a 68 69 2e 6c 69 值一组键值对,依次的含义是: 08 由 (field_number << 3) | wire_type 可知 值的类型为数值,长度为1 15 就是这个了,0x15 就是 21 18 同理可知值为3个字节长度的数值 0 但其值为0,就不再去占3个字节了 3a 于是这个又是键了,(2 7)表示之后7个字节是一个字符串 6 这是长度 7a 68 69 2e 6c 69 这是值 zhi.li
邻家大哥呀 2018-01-12
  • 打赏
  • 举报
回复
引用 8 楼 xuzuning 的回复:
Convert.ToBase64String:转换后 二进制就变成了字母。
你把他贴出来看看


我运行了下结果,麻烦大神给看下呢


第一张图片是代码,第二章是运行的结果呢
xuzuning 2018-01-12
  • 打赏
  • 举报
回复
Convert.ToBase64String:转换后 二进制就变成了字母。 你把他贴出来看看
邻家大哥呀 2018-01-12
  • 打赏
  • 举报
回复
引用 6 楼 hanjun0612 的回复:
[quote=引用 5 楼 IT_choshim 的回复:]
单独Log的话,就是本身的值。MemoryStream实例化对象ToArray()后得到byte数组,如何将byte数组转成string字符串呢。
toString():转换后 打印出来的就是空值,但是打印Length是有数据的。
Convert.ToBase64String:转换后 二进制就变成了字母。
麻烦大神说下 ,这是啥原因呢

我看你的错误,应该是转换int16时出错。

[/quote]

现在我重新写了一份,麻烦您帮我看下呢。
就是我刚才说的Log时,不显示但是Length是有数据的。麻烦了哈
正怒月神 2018-01-12
  • 打赏
  • 举报
回复
引用 5 楼 IT_choshim 的回复:
单独Log的话,就是本身的值。MemoryStream实例化对象ToArray()后得到byte数组,如何将byte数组转成string字符串呢。 toString():转换后 打印出来的就是空值,但是打印Length是有数据的。 Convert.ToBase64String:转换后 二进制就变成了字母。 麻烦大神说下 ,这是啥原因呢
我看你的错误,应该是转换int16时出错。
邻家大哥呀 2018-01-12
  • 打赏
  • 举报
回复
引用 4 楼 hanjun0612 的回复:
调试你的 jd[Retry]和 jd[Type]分别是什么值
单独Log的话,就是本身的值。MemoryStream实例化对象ToArray()后得到byte数组,如何将byte数组转成string字符串呢。 toString():转换后 打印出来的就是空值,但是打印Length是有数据的。 Convert.ToBase64String:转换后 二进制就变成了字母。 麻烦大神说下 ,这是啥原因呢
正怒月神 2018-01-12
  • 打赏
  • 举报
回复
调试你的 jd[Retry]和 jd[Type]分别是什么值
邻家大哥呀 2018-01-12
  • 打赏
  • 举报
回复
各位大神咋不回答呢,看在小弟新手的份上 来看看吧。新人开车不容易啊。 不会的大哥 说两句话也行啊,不要太冷清呢
邻家大哥呀 2018-01-10
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
FormatException: Input string was not in the correct format System.Int16.Parse (System.String s) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Int16.cs:209) System.Convert.ToInt16 (System.String value) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Convert.cs:1114) -》这不是错误提示么,调试看输入的数据格式是否支持。
是数据类型的问题吧,大神 小菜一事不明。如果用Log打印protobuf中的一个字符串 是以二进制的形式输出还是以字符串形式输出呢,麻烦大神了呢
exception92 2018-01-10
  • 打赏
  • 举报
回复
FormatException: Input string was not in the correct format System.Int16.Parse (System.String s) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Int16.cs:209) System.Convert.ToInt16 (System.String value) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Convert.cs:1114) -》这不是错误提示么,调试看输入的数据格式是否支持。

110,500

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧