当我IsLittleEndian
在BitConverter
. 我当然认为它应该在那里,我应该能够指定我喜欢的任何字节序。好吧,我的幸福并没有持续多久。花了一些时间才发现没有办法设置字段。该字段为readonly
,并且仅true
在静态构造函数中设置为:
static BitConverter()
{
IsLittleEndian = true;
}
有趣的是,该字段实际上是在代码中使用的。例如ToInt32
方法实现如下所示:
if (IsLittleEndian)
{
return (((numRef[0] | (numRef[1] << 8)) | (numRef[2] << 0x10)) | (numRef[3] << 0x18));
}
return ((((numRef[0] << 0x18) | (numRef[1] << 0x10)) | (numRef[2] << 8)) | numRef[3]);
所以似乎ToInt32
完全有能力处理小端和大端。
我的问题是:为什么有一段非常有用的代码已经实现并放在 FCL 中,但是没有办法使用它(当然,除非你开始弄乱反射)?仅仅是因为一些开发人员没有按时完成任务而半途而废吗?即使是这样,为什么代码不可用,但字段可用?我希望有一个很好的理由。
我想让自己清楚。我不需要关于如何处理大端值的解决方案。我确实有解决办法。解决方案实际上显示在我的问题中。