>我正在与需要空终止字符串的服务器进行通信
>如何在C#中巧妙地做到这一点?
>如何在C#中巧妙地做到这一点?
解决方法
我假设您正在实现某种二进制协议,如果字符串为空终止.你使用的是BinaryWriter吗?
默认的BinaryWriter将字符串作为长度前缀.你可以改变这种行为:
class MyBinaryWriter : BinaryWriter { private Encoding _encoding = Encoding.Default; public override void Write(string value) { byte[] buffer = _encoding.GetBytes(value); Write(buffer); Write((byte)0); } }
那么你可以写这样的任何字符串:
using (MyBinaryWriter writer = new MyBinaryWriter(myStream)) { writer.Write("Some string"); }
您可能需要根据需要调整_encoding位.
当然,您可以根据需要转移的其他数据类型来扩展课程,保持实际的协议实现不错,干净.你可能还需要你自己的(非常相似的)BinaryReader.