面試官:如果存取IP地址,用什么數據類型比較好 (C#版本)


受到這篇文章的影響,C#版本也可以實現IP的存取
MySQL如何有效的存儲IP地址及字符串IP和數值之間如何轉換

邏輯右移就是不考慮符號位,右移一位,左邊補0
算術右移需要考慮符合位,右移一位,若符號位為1,就在左邊補1,否則補0
算術右移也可以進行有符號位的除法,右移n位就等於2的n次方
205的二進制數是11001101 右移一位
邏輯右移 [0]1100110
算術右移 [1]1100110

    public class IpLongUtils
    {
        /**
             * 把字符串IP轉換成long
             *
             * @param ipStr 字符串IP
             * @return IP對應的long值
             */
        public static long ip2Long(string ipStr)
        {
            string[] ip = ipStr.ToLower().Split(new string[]{"http",":","/","."},System.StringSplitOptions.RemoveEmptyEntries);
            return (long.Parse(ip[0]) << 24) + (long.Parse(ip[1]) << 16)
                    + (long.Parse(ip[2]) << 8) + long.Parse(ip[3]);
        }

        /**
         * 把IP的long值轉換成字符串
         *
         * @param ipLong IP的long值
         * @return long值對應的字符串
         */
        public static string long2Ip(long ipLong)
        {
            var ipStr= $"{ipLong >> 24}.{(ipLong >> 16) & 0xFF}.{(ipLong >> 8) & 0xFF}.{ipLong & 0xFF}";
            return ipStr;
        }
    }
Debug.WriteLine(IpLongUtils.ip2Long("http://192.168.1.1"));
Debug.WriteLine(IpLongUtils.ip2Long("192.168.0.1"));
Debug.WriteLine(IpLongUtils.long2Ip(3232235521L));
3232235777
3232235521
192.168.0.1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM