【问题标题】:Output numbers from a string containing hex and decimal values从包含十六进制和十进制值的字符串中输出数字
【发布时间】:2026-02-12 03:30:02
【问题描述】:

我正在从网站上抓取数据,以便为我的同事获取有用的数据,而不是经常刷新页面。

C# 代码直接从 HTML 中提取数据。但是数据以一种奇怪的方式加密,并以非人类可读的字符串形式返回,这对我们没有帮助。

例如,在表格中,产品编号可能显示为“14501219”。在 HTML 中,包含数据的元素的内部文本是“14501219”。

我需要知道如何:

  1. 将十六进制和十进制从同一字符串解析为 int
  2. 将这些结果附加到最终输出中

到目前为止,我已经完成了这个伪代码,但我不知道它在 C# 中的外观或使用什么转换方法:

for (int i = 0; i < inputString.Length; i++)
   {
      if (inputString[i] = '&' && inputstring[i+1] = '#')
           {
                if (inputstring[i+2 = 'x'
                {
                     //convert to hex
                     //append to outputList
                }
                else
                {
                    //convert to decimal
                    //append to outputList
                }
            }
      else
            {
                 //convert to string literal
            }
   }

任何帮助将不胜感激

【问题讨论】:

  • 你知道你看到的字符串是十六进制的字符串文字还是一系列原始字节数?
  • 我修好了,当我输入时,Markdown 自动将原始字符串转换为所需的数字。
  • @lrb 我不确定。我怎么知道它是字符串文字还是原始字节?
  • 我认为是字符或数字的ascii表示,例如ctrl lf有一个ascii等价物。10/13什么的,记不住了。您只需要转义字符,也许对 url 进行编码/解码。 Url.Decode()?
  • 这可以通过“HTML-entity decode”解决。遍历字符串并将每个 HTML 实体(例如“1”)转换为相应的数字(例如 1)。如果手动进行,最简单的方法是使用带有替换功能的Regex.Replace,并匹配@"&amp;#(\d\d);"。然后替换函数将获取值,例如“49”,并允许返回相关转换后的“1”值 - 参见 ASCII 字符表。

标签: c# int hex type-conversion decimal


【解决方案1】:

在您添加字符串文字示例后,我更新了您所看到/询问的内容。为了让 http 客户端不会被某些特殊字符绊倒,他们使用 acsii 表示来结束。大多数框架都有处理编码 url 的方法。例如,在 c# 中,您应该始终确保在读写时在内部使用 HttpUtility.UrlDecodeHttpUtility.UrlEncode

【讨论】: