【问题标题】:What are PCL-compliant equivalents of IPAddress.NetworkToHostOrder methods?IPAddress.NetworkToHostOrder 方法的 PCL 兼容等效项是什么?
【发布时间】:2015-07-16 00:56:29
【问题描述】:

System.Net.IPAddress 类不适用于 .NET 中的 PCL(可移植类库)。我正在尝试将一些处理二进制流的代码迁移到 PCL,并且广泛使用了 IPAddressNetworkToHostOrder 方法(有三个重载)。什么是等效的 PCL 兼容代码?

【问题讨论】:

  • 它们是非常简单的方法,只是copy them

标签: c# portable-class-library


【解决方案1】:

最终借用了 Mono:

internal static class EndianConverter
{
    public static long NetworkToHostOrder(long network)
    {
        return !BitConverter.IsLittleEndian ? network : SwapLong(network);
    }

    public static int NetworkToHostOrder(int network)
    {
        return !BitConverter.IsLittleEndian ? network : SwapInt(network);
    }

    public static short NetworkToHostOrder(short network)
    {
        return !BitConverter.IsLittleEndian ? network : SwapShort(network);
    }

    public static short HostToNetworkOrder(short host)
    {
        return !BitConverter.IsLittleEndian ? (host) : SwapShort(host);
    }

    public static int HostToNetworkOrder(int host)
    {
        return !BitConverter.IsLittleEndian ? (host) : SwapInt(host);
    }

    public static long HostToNetworkOrder(long host)
    {
        return !BitConverter.IsLittleEndian ? (host) : SwapLong(host);
    }

    private static short SwapShort(short number)
    {
        return (short) (((number >> 8) & 0xFF) | ((number << 8) & 0xFF00));
    }

    private static int SwapInt(int number)
    {
        return (((number >> 24) & 0xFF)
        | ((number >> 08) & 0xFF00)
        | ((number << 08) & 0xFF0000)
        | ((number << 24)));
    }

    private static long SwapLong(long number)
    {
        return (((number >> 56) & 0xFF)
        | ((number >> 40) & 0xFF00)
        | ((number >> 24) & 0xFF0000)
        | ((number >> 08) & 0xFF000000)
        | ((number << 08) & 0xFF00000000)
        | ((number << 24) & 0xFF0000000000)
        | ((number << 40) & 0xFF000000000000)
        | ((number << 56)));
    }

【讨论】:

    猜你喜欢
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多