将IP转换为字节/转换回字符串

Ale*_*dre 5 .net c# ip bytearray

我将SQLVERVER 2008数据库上的IPV4地址存储为二进制(4).所以,我在数据输入之前转换值(并且由于公司的限制,我不能在数据库中创建函数,这不是讨论的问题).

public static byte[] IpToBin(string ip)
{
    return IPAddress.Parse(ip).GetAddressBytes();
}

public static string HexToIp(string ip)
{
    return new IPAddress(long.Parse(ip, NumberStyles.HexNumber)).ToString(); 
}
Run Code Online (Sandbox Code Playgroud)

调用IpToBin后,生成的数据为(例如0x59FC09F3).当我调用HexToIp时,ip反转可能是由于很少/大端转换.

任何人都可以提出一个没有500亿行代码的合适解决方案吗?

Mar*_*ell 6

我认为这里真正的问题是你将原始形式视为一个字符串; 特别是因为它是binary(4),你永远不应该这样做:只需从数据库中取回它作为byte[].IpToBin很好,但HexToIp应该是:

public static IPAddress BinToIp(byte[] bin)
{
    return new IPAddress(bin);
}
Run Code Online (Sandbox Code Playgroud)

然后:完成工作.但是使用现有HexToIp代码,您需要:

return new IPAddress(new byte[] {
    Convert.ToByte(ip.Substring(0,2), 16), Convert.ToByte(ip.Substring(2,2), 16),
    Convert.ToByte(ip.Substring(4,2), 16), Convert.ToByte(ip.Substring(6,2), 16)}
    ).ToString(); 
Run Code Online (Sandbox Code Playgroud)