2

IPAddress类似乎不存在于WinRT API中。是否有一个相当于IPAddress.HostToNetworkOrder()可用于将一个int从主机订单转换为网络订单(Little Endian到Big Endian)?IPAddress.HostToNetworkOrder()等价于WinRT?

+0

可能没有办法。你总是可以自己写一个。 – 2012-08-03 15:11:49

回答

1

我写完了自己的方法。这很简单。它所做的只是颠倒字节顺序。这是您的复制和粘贴的快感:

public static int ReverseEndianness(int num) 
{ 
    byte[] bytes = BitConverter.GetBytes(num); 
    byte[] reversedBytes = new byte[bytes.Length]; 

    for (int i = 0; i < bytes.Length; i++) 
    { 
     reversedBytes[i] = bytes[bytes.Length - 1 - i]; 
    } 

    return BitConverter.ToInt32(reversedBytes, 0); 
} 
+1

可以使用[Array.Reverse](http://msdn.microsoft.com/fr-fr/library/d3877932(v = vs.110).aspx)来反转该数组。 – 2014-02-08 13:45:44

3

在很多情况下(不是全部,当然),你可以使用的DataReaderDataWriter为:

DataReader reader = new DataReader(stream.AsInputStream()); 
reader.ByteOrder = ByteOrder.BigEndian; // standard network byte order 
reader.ReadInt16(); 

出于兼容性我使用反射器的原因:

public static short HostToNetworkOrder(short host) 
    { 
     return (short)(((host & 0xff) << 8) | ((host >> 8) & 0xff)); 
    } 

    public static int HostToNetworkOrder(int host) 
    { 
     return (((HostToNetworkOrder((short)host) & 0xffff) << 0x10) | (HostToNetworkOrder((short)(host >> 0x10)) & 0xffff)); 
    } 

    public static long HostToNetworkOrder(long host) 
    { 
     return (long)(((HostToNetworkOrder((int)host) & 0xffffffffL) << 0x20) | (HostToNetworkOrder((int)(host >> 0x20)) & 0xffffffffL)); 
    } 

    public static short NetworkToHostOrder(short network) 
    { 
     return HostToNetworkOrder(network); 
    } 

    public static int NetworkToHostOrder(int network) 
    { 
     return HostToNetworkOrder(network); 
    } 

    public static long NetworkToHostOrder(long network) 
    { 
     return HostToNetworkOrder(network); 
    }