C#预处理程序指令

问题描述

| 在C ++中,我们可以这样做:
struct {
#if defined (BIGENDIAN)
        uint32_t h;
        uint32_t l;
#else
        uint32_t l;
        uint32_t h;
#endif
    } dw;
现在,在C#中不是那么简单。我有一种方法可以测试BigEndian,但可以在编译时定义结构,如何在C#中获得相同的效果?我当时以为我可以拥有\“ BoardBig \”和\“ BoardLittle \”之类,并使用工厂从IsBigEndian检查中获取所需的类。对于_WIN64检查,我可以使用类似\“ Position_64 \”和\“ Position_32 \”之类的类。这是一个方法吗?由于C#无法定义#define IsBigEndian 1之类的语句或具有ya的语句,因此不确定该怎么做。     

解决方法

更新:正如其他张贴者所指出的那样(反对),这不是C#中字节序的解决方案。 C#条件编译指令
  #if BIGENDIAN
      uint32_t h;    
      uint32_t l;
  #else
      uint32_t l;
      uint32_t h;        
  #endif
顺便说一句,您应该避免这些。使代码更难测试。     ,由于无法将C#结构“存储映射”到原始数据,因此使用预处理器没有真正的优势。因此,尽管C#确实具有可用于其他目的的预处理器功能,但我认为它们对您没有用。 取而代之的是,只需要使用一种首选的结构,并为特殊情况埋下低级比特缠绕。这是结构的大端和小端处理示例: 将big-endian字节集合编组到结构中以提取值     ,C#中有条件编译,但是您不能根据字节顺序使用它来获取不同的代码。对于托管语言,在编译时未知系统的流行程度。 编译器生成IL代码,该代码可以在大端和小端系统上执行。 JIT编译器负责将IL代码转换为本地机器代码,并将数字文字转换为正确的格式。 您可以使用
BitConverter.IsLittleEndian
找出运行时的字节序。