You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

抓取华硕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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:22:38