C# protobuf ByteString和string之间的转换方法

本文介绍了在编程中如何将ByteString转换为string,以及如何将string转换为ByteString的方法。示例代码包括使用ToString()函数和Encoding.Default.GetBytes()进行转换,对于处理二进制数据和字符串之间的相互操作非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ByteString到string:

rsp.Name.ToString()

string到ByteString:

ByteString.CopyFrom(Encoding.Default.GetBytes(playerNM))
### C# 中使用 Protobuf 的示例教程 #### 创建 `.proto` 文件 定义协议缓冲区消息的第一步是创建一个`.proto`文件来描述数据结构。假设有一个名为 `player.proto` 的文件,其内容如下: ```protobuf syntax = "proto3"; option csharp_namespace = "Test"; message Player { int32 id = 1; string name = 2; } ``` 此代码片段指定了用于序列化反序列化的字段及其编号[^3]。 #### 编译 `.proto` 文件到 C# 为了使上述定义能够在C#程序中被识别并操作,需利用Google提供的编译器`protoc`将`.proto`转换为对应的C#源码。这一步骤可通过命令行完成,也可以借助在线工具或IDE插件简化流程[^4]。 对于手动方式,在安装好环境后执行类似下面的指令: ```bash protoc --csharp_out=./generated player.proto ``` 该命令会读取指定路径下的`player.proto`并将结果保存至当前目录下新建立的`generated`子文件夹内。 #### 序列化与反序列化对象实例 一旦拥有了由`.proto`生成的类库,则可以在应用程序里方便地进行数据交换处理。以下是具体实现方法的一个简单案例[^2]: ```csharp using System.IO; using Google.Protobuf; // 假设已引入通过 protoc 自动生成的命名空间 namespace Test { class Program { static void Main(string[] args){ var player = new Player{ Id = 1001, Name = "Alice" }; // 将Player对象序列化为字节数组 byte[] data = player.ToByteArray(); // 输出二进制流以便传输或其他用途 File.WriteAllBytes("player.dat", data); // 从磁盘恢复原始状态 byte[] rawData = File.ReadAllBytes("player.dat"); Player loadedPlayer = Player.Parser.ParseFrom(rawData); Console.WriteLine($"ID={loadedPlayer.Id}, Name={loadedPlayer.Name}"); } } } ``` 这段代码展示了怎样构建一个`Player`类型的实体,并将其转化为适合存储或发送的形式;之后又说明了如何解析接收到的信息重建原来的对象形态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值