- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当我在 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/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!