抓取华硕Prime Z790 BIOS版本转Int64丢失前导0的技术问询
问题:解析HTML获取BIOS版本转Int64时丢失前导0
解析HTML文档元素并转换为Int64类型时,出现前导0丢失的问题。通过InnerHtml获取“Prime Z790 BIOS 0812”的最后4个字符,期望变量newz790的结果为0812,但转换后仅得到812。相关代码如下:
namespace getsqldata { public static class ASUSBIOSversions { public static long newz790; public static async Task Run() { //*****************Get BIOS info from website************** //Scrape Website { await GethtmlAsync(); //Console.ReadLine(); } async static Task GethtmlAsync() { //Get Url for scraping and create document for parsing var url = "https://www.asus.com/motherboards-components/motherboards/prime/prime-z790-p/helpdesk_bios/?model2Name=PRIME-Z790-P"; var httpClient = new HttpClient(); var html = await httpClient.GetStringAsync(url); var htmlDocument = new HtmlDocument(); htmlDocument.LoadHtml(html); await Task.Delay(5000); // Add a delay of 5 seconds //Specify element of page to be retrieved var biositem = htmlDocument.DocumentNode.SelectNodes("//div[contains(@class, 'ProductSupportDriverBIOS__fileTitle')]"); //Grab the BIOS version ASUSBIOSversions.newz790 = Convert.ToInt64(biositem[0].InnerHtml[^4..]); } } } }
解决方法
这是因为数值类型(如Int64)本身不存储前导0——前导0对整数无数值意义,转换时会自动忽略。根据需求选择以下方案:
方案1:直接用字符串存储版本号
若不需要对版本号做数值运算,仅需保留"0812"格式,将newz790的类型改为string即可:
public static string newz790; // 获取版本号时直接赋值字符串 ASUSBIOSversions.newz790 = biositem[0].InnerHtml[^4..];
方案2:用数值类型存储,显示时补前导0
若必须用数值类型(如需要比较版本号大小),在需要展示的场景通过格式化字符串补回前导0:
// 存储逻辑不变,仍用Int64 ASUSBIOSversions.newz790 = Convert.ToInt64(biositem[0].InnerHtml[^4..]); // 显示时格式化为4位数字,自动补前导0 Console.WriteLine(newz790.ToString("D4")); // 输出结果为 "0812"
方案3:使用专用版本类型处理
若要严谨处理BIOS版本(比如适配不同长度的版本号),可以用System.Version类型:
string versionStr = biositem[0].InnerHtml[^4..]; // 根据版本规则拆分(示例将0812拆分为主版本08、次版本12) Version biosVersion = new Version(int.Parse(versionStr.Substring(0, 2)), int.Parse(versionStr.Substring(2, 2))); // 格式化输出或做版本比较 Console.WriteLine(biosVersion.ToString("MM.mm")); // 输出 "08.12"
内容的提问来源于stack exchange,提问作者UnknownDonut
相关产品推荐
相关产品推荐

