生成mac地址的代码正在生成重复项

时间:2014-03-07 20:22:55

标签: c# mac-address

我已经生成了一个MAC地址块,需要将它们存储在Oracle 11gR2表中。我通过SQL Developer Version 4.0.0.13创建了一个模式,如下所示:

CREATE TABLE "USER"."MAC_DB" 
(   
    "MAC_ADDRESS" VARCHAR2(20 BYTE) NOT NULL ENABLE, 
    "STATUS" VARCHAR2(20 BYTE) DEFAULT 'Available' NOT NULL ENABLE, 
    "PO_NUMBER" VARCHAR2(20 BYTE), 
     CONSTRAINT "MAC_DB_PK" PRIMARY KEY ("MAC_ADDRESS")

) 

插入我生成的数据导致了一系列重复值,我对此非常困惑。

以下是我用来生成mac地址的代码。它不漂亮,可以改进并包含一个bug。

我正在寻找一些指南到错误发生的地方:

public List<string> generateMACAddresses(string prefix)
{
    List<string> addresses = new List<string>();
    for (int i = 0x00000; i <= 0xFFFFF; i++)
    {                
        addresses.Add(prefix+i.ToString("X").PadRight(5,'0'));

        using (var sw = new StreamWriter("macAddresses.txt", append: true))
        {                     
            sw.WriteLine(mac);
        }
    }         

    return addresses;            
}

使用以下方法调用该方法:

generateMACAddresses("AB2B3B4");

我期望生成1,048,576,但在导入生成的txt文件后,我最终只得到646,574。

1 个答案:

答案 0 :(得分:3)

我认为您应该使用PadLeft代替PadRight

以例如:

  1.PadRight(5, '0'); // 10000
 10.PadRight(5, '0'); // 10000 (again)
100.PadRight(5, '0'); // 10000 (and again)

您应该执行PadLeft以避免重复

  1.PadLeft(5, '0'); // 00001
 10.PadLeft(5, '0'); // 00010
100.PadLeft(5, '0'); // 00100