我在C ++中有一个简短的代码片段,我需要在C#中具有相同的功能:
typedef enum {eD=0x0, eV=0x1, eVO=0x2, eVC=0x3} eIM;
#define htonl(x) ( ( ( ( x ) & 0x000000ff ) << 24 ) | \
( ( ( x ) & 0x0000ff00 ) << 8 ) | \
( ( ( x ) & 0x00ff0000 ) >> 8 ) | \
( ( ( x ) & 0xff000000 ) >> 24 ) )
int value = htonl(eV);
不幸的是我不是大程序员,所以我需要一些帮助。
答案 0 :(得分:5)
enum eIM { eD = 0, eV, eVO, eVC }
int value = System.Net.IPAddress.HostToNetworkOrder((int)eIM.eV);
答案 1 :(得分:0)
好吧,请记住C#是托管代码,所以你不应该尝试使用它进行过多的操作。并且,C#抱怨我需要在代码中使用无符号整数,但请尝试:
uint htonl(uint i)
{
return (((i & 0x000000ff) << 24) | ((i & 0x0000ff00) << 8) | ((i & 0x00ff0000) >> 8) | ((i & 0xff000000) >> 24));
}
答案 2 :(得分:0)
public enum eIM {eD=0x0, eV=0x1, eVO=0x2, eVC=0x3}
public static class ByteReverser
{
public static uint ReverseBytes(uint value)
{
return (uint)((uint)((value & 0x000000ff) << 24) |
(uint)((value & 0x0000ff00) << 8) |
(uint)((value & 0x00ff0000) >> 8) |
(uint)((value & 0xff000000) >> 24));
}
}
后来:
var value = ByteReverser.ReverseBytes((uint)eIM.eV);