[英]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.