我正在研究一些代码,这些代码将 IL 字节数组解析为MethodBody.GetILAsByteArray
.
假设我想从这样的 IL 字节流中读取元数据令牌或 32 位整数常量。起初我认为使用BitConverter.ToInt32(byteArray, offset)
会使这变得容易。但是我现在担心这在大端机器上不起作用。
据我所知,IL 总是对多字节值使用 little-endian 编码:
“所有参数编号都被编码为最小地址的最低有效字节(一种通常称为“小端”的模式)。” —公共语言基础结构注释标准,第 III 部分,ch。1.2(第 482 页)。
由于BitConverter
的转换方法尊重计算机体系结构的字节顺序(可以通过 发现BitConverter.IsLittleEndian
),因此我得出结论,BitConverter
不应使用它从 IL 字节流中提取多字节值,因为这会在大端机器上给出错误的结果。
这个结论正确吗?
如果是:有没有办法告诉
BitConverter
转换使用哪种字节顺序,或者 BCL 中是否有任何其他类提供此功能,或者我是否必须编写自己的转换代码?如果不是:我哪里错了?
Int32
从 IL 字节数组中提取操作数值的正确方法是什么?