将字节交换/转移代码片段从C ++转换为.NET

时间:2010-08-17 17:48:36

标签: c# c++

我在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);

不幸的是我不是大程序员,所以我需要一些帮助。

3 个答案:

答案 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);