我将 IPV4 地址作为 Binary(4) 存储在 SQLSERVER 2008 数据库中。因此,我在数据输入之前转换值(并且由于公司限制我不能在数据库中创建函数,所以这不值得讨论)。
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();
}
调用IpToBin后,生成的数据为(例如0x59FC09F3)。当我调用 HexToIp 时,ip 可能由于小/大端转换而反转。
谁能想出一个没有 500 亿行代码的像样的解决方案?
最佳答案
我认为这里真正的问题是您将原始表单视为字符串;特别是因为它是 binary(4)
,您永远不必这样做:只需将它作为 byte[]
从数据库中取回即可。 IpToBin
没问题,但 HexToIp
应该是:
public static IPAddress BinToIp(byte[] bin)
{
return new IPAddress(bin);
}
然后:工作完成。但是对于现有的 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();
关于c# - 将 IP 转换为字节/转换回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14499482/