IPAddress クラスは WinRT API に存在しないようです。IPAddress.HostToNetworkOrder()
int をホスト順からネットワーク順 (リトル エンディアンからビッグ エンディアン) に変換するために利用できる同等のものはありますか?
質問する
1456 次
2 に答える
3
多くの場合 (もちろんすべてではありません) 、そのためにDataReaderとDataWriterを使用できます。
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);
}
于 2012-08-26T14:55:57.657 に答える
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);
}
于 2012-08-06T21:46:05.347 に答える