C#生成一组连续的十六进制地址字符串
首先随机地生成一个十六进制串,就用字符串构造一个吧。
随机数用Random.Next();生成,不过需要注意的是,这个函数用当前始终作为随机种子,无论循环执行多少次函数GetRandomAddress()得到的都是相同的结果。
private char[] RandomSet = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; public string GetRandomAddress() { Random rd = new Random(); string result = "0x00"; for (int i = 0; i < 6; i++) { result += RandomSet[rd.Next(0, 16)]; } return result; }
得到一个十六进制字符串了,例如"0x02837487" ,接下来就实现一下步长为60的串吧。
十六进制转换为十进制:例如
string hex = "0x02837487"; // 十六进制字符串 int dex = Convert.ToInt(hex, 16); // 表示传入一个十六进制字符串,得到转换后的十进制数据
十六进制转换为十进制:例如
int dec = 60; // 十进制数dec string hex = string.Format("{0:X}", dec); // 将dec转换为十六进制字符串
案例:生成等间距的十六进制序列,第一个数为"0x02837487",计算出"0x02837487"+60, "0x02837487"+120.......序列
// 十六进制加十进制 static string hexAddDec(string hex, int addNum) { int dec1 = Convert.ToInt32(hex, 16); return string.Format("{0:X}", dec1 + addNum); } static void Main(string[] args) { string start = "0x02837487"; int step = 60; for(int i = 0; i < 24; i++) { Console.WriteLine(hexAddDec(start, i * step)); } Console.ReadKey(); }
结果:
2837487
28374C3
28374FF
283753B
2837577
28375B3
......
28378FB
2837937
2837973
28379AF
28379EB
显然正确