簡體   English   中英

從C到C#的#define宏轉換

[英]C to C# conversion of #define macros

您將如何將以下C #define轉換為c#。

        #define get16bits(d) (*((const uint16_t *) (d)))
        #if !defined (get16bits)
        #define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8)\
                  +(uint32_t)(((const uint8_t *)(d))[0]) )
        #endif

我知道您可能將uint32_t替換為UInt32,將其他類型更改為c#等效,但是如何使上述方法成為靜態方法。 那將是最好的方法嗎?

鮑勃。

我不知道您為什么要在定義get16bits之后立即檢查是否定義了它,因為唯一的方法不是預處理器錯誤,它將停止編譯。

就是說,這是將可惡的宏轉換為C#的方法:

aNumber & 0xFFFF;

實際上,這是將宏轉換為C的方法:

a_number & 0xFFFF;

您不需要所有這些轉換向導就可以獲取數字的低16位。 這里有更多的C定義來向您展示我在說什么:

#define   getbyte(d)     (d & 0xFF)
#define   getword(d)     (d & 0xFFFF)
#define   getdword(d)    (d & 0xFFFFFFFF)
#define   gethighword(d) ((d & 0xFFFF0000) >> 16)
#define   gethighbyte(d) ((d & 0xFF00) >> 8)

您是否在生產代碼中真正使用過該宏?

在C#中,獲取整數的低16位非常容易:

int x = 0x12345678;
short y = (short)x; // gets 0x5678

如果您想要一個靜態方法來做,就這么簡單:

public static short Get16Bits(int value) {
   return (short)value;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM