gpt4 book ai didi

c# - BitConverter 类中 IsLittleEndian 的用例是什么?

转载 作者:太空狗 更新时间:2023-10-29 18:25:41 26 4
gpt4 key购买 nike

当我在 BitConverter 中发现 IsLittleEndian 字段时,我非常高兴。我当然认为它应该在那里,我应该能够指定我喜欢的任何字节序。好吧,我的幸福并没有持续多久。花了一些时间才发现没有办法设置字段。该字段为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 中实现了一段非常有用的代码,但没有办法使用它(当然,除非你开始搞乱反射)?是否只是因为一些开发人员没有 catch 最后期限而半途而废?即使是这样,为什么代码不可用,但字段可用?我希望这是有充分理由的。

我想说清楚。我不需要关于如何处理大端值的解决方案。我有办法。解决方案实际上显示在我的问题中。

最佳答案

答案在于查看 reference source对于 BitConverter 类。

相关摘录是:

        // This field indicates the "endianess" of the architecture.
// The value is set to true if the architecture is
// little endian; false if it is big endian.
#if BIGENDIAN
public static readonly bool IsLittleEndian /* = false */;
#else
public static readonly bool IsLittleEndian = true;
#endif

该标志由预处理器指令硬连接,因为编译特定版本框架的体系结构的字节顺序不会改变。

关于c# - BitConverter 类中 IsLittleEndian 的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6406570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com