c# - 与 .NET 之间的二进制协议(protocol)(C# 语法)

标签 c# .net binary protocols

我想听听你会如何解决这种编程任务!? 每种类型(OPER=1类型)对应一个特定的信息。

这只是大约 10 个具有相同结构的规范之一。首选创建这些“转换器”(协议(protocol))的通用方法。

Protocol specification

最佳答案

如果您正在阅读/编写此内容,我会简单地在 Stream 级别上翻译它,例如:

int b = source.ReadByte();
if (b < 0) throw new EndOfStreamException();
int operx = b & 15;
int oper = (b >> 4) & 15;            
b = source.ReadByte();
if (b < 0) throw new EndOfStreamException();
int prefix = b & 7;
int reg = (b >> 3) & 31;
b = source.ReadByte();
if (b < 0) throw new EndOfStreamException();
int period = b & 7;
int fas = (b >> 3) & 3;
int tar = (b >> 5) & 7;

如果您要做很多,您可以将其包装成更优雅的东西,也许使用属性来指定偏移量 - 但对于 10?嗯……不值得。编写一个强大的通用转换器是大量的艰苦工作。

关于c# - 与 .NET 之间的二进制协议(protocol)(C# 语法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5179515/

相关文章:

c# - 多线程还是不多线程?

.net - 编译 C 以使用 CLR

c# - MemoryCache绝对过期和内存限制

c# - 向 TitleCase 方法 C# 添加异常

c# - ToArray() 和 ToArray<int>(); 之间的区别

c# - 如何从 URL 获取数据并将其保存到 C#.NET 中的二进制文件中,而不会造成编码困惑?

Perl:将二进制数编码为base64

python-2.7 - Python - CVXOPT 中的整数线性规划 (ILP) 函数未生成正确的结果

c# - 如何开始编写这个 Orchard 模块

.net - clr profiler api:ICorProfilerCallback::ExceptionThrown GC 安全吗