您如何将以下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#equivalent,但是如何从上面的静态方法开始。这是实现这一目标的最佳方式。
鲍勃。
答案 0 :(得分:2)
我不知道你为什么要在确定get16bits
之后立即查看aNumber & 0xFFFF;
,因为它不会是一个预处理程序错误,它会阻止你的编译。
现在,那就是说,这就是你如何将那个神圣的宏转换为C#:
a_number & 0xFFFF;
实际上,以下是将宏转换为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)
你不需要所有这个转换技巧只是为了获得一个数字的低16位。这里有更多的C定义来向您展示我在说什么:
{{1}}
您是否真的在生产代码中使用了该宏?
答案 1 :(得分:0)
在C#中获取整数的低16位非常容易:
int x = 0x12345678;
short y = (short)x; // gets 0x5678
如果你想要一个静态的方法,那就简单了:
public static short Get16Bits(int value) {
return (short)value;
}