【问题标题】:C#: How to check that string is a two digits hexnumber?C#:如何检查该字符串是两位数的十六进制数?
【发布时间】:2016-03-15 13:42:35
【问题描述】:

在我的函数中,我有一个字符串参数,它通常表示两位十六进制数,如 5E 或 0A 我如何检查这个字符串是否真的是一个数字而不是其他任何东西(如 G9 或 NB 或 abcdef),并且所有字符都用大写(A 而不是 a)? 感谢您的帮助

【问题讨论】:

  • 你试过什么?这不是代码编写服务。另外,您只想检查还是强制为大写?
  • 到目前为止你有没有尝试过?您是否知道可以使用索引器从字符串中获取单个字符,并且可以将字符与>= 等进行比较? (您也可以使用正则表达式,但我不确定我是否会......)

标签: c#


【解决方案1】:

你可以试试正则表达式

  String source = "AC";

  Boolean result = Regex.IsMatch(source, "^[0-9A-Fa-f]{2}$");

如果您只接受 大写 十六进制符号(A..F 而不是 a..f

  Boolean result = Regex.IsMatch(source, "^[0-9A-F]{2}$");

如果您接受一个符号十六进制(例如A0C)以及两个符号(AA3F02

  Boolean result = Regex.IsMatch(source, "^[0-9A-F]{1,2}$");

【讨论】:

  • 请注意,OP 要求进行大写验证。此外,他说输入“通常”表示两位十六进制数,但不是总是{1,2} 可能是一个更好的主意。
【解决方案2】:

正则表达式呢?

private bool IsHex(string input, int maxDigits = 2)
{
    return !String.IsNullOrWhiteSpace(input) && 
           maxDigits > 0 &&
           Regex.IsMatch(input, String.Format("^[A-F0-9]{{1,{0}}}$", maxDigits));
}

您可以保留最多 2 位的默认值,也可以指定自己的限制:

bool result = IsHex("AF", 1); // Yields false

【讨论】:

    【解决方案3】:

    您可以为此使用正则表达式。

    Regex r = new Regex("^[0-9a-f]{2,2}$", RegexOptions.IgnoreCase);
    Match m = r.match(someStr);
    

    然后您可以从中判断您的字符串是否为十六进制值

    【讨论】:

      【解决方案4】:
      public bool IsTwoDigitsHexNumber(string s) {
          return !string.IsNullOrEmpty(s) &&
              s.Length <= 2 &&
              s.All(c => c >= '0' && c <= '9' || c >= 'A' && c <= 'F');
      }
      

      【讨论】:

      • 应该是c &gt;= '0'c &lt;= 'F'
      • 请解释您的代码解决问题的原因,此外,Thomas 应该感谢有人免费编写他的代码。
      • @StephenReindl 那么你也应该把你的评论放在其他答案下面。
      • @StephenReindl 和 FYI:一开始我不打算回答,但后来出现了 3 个其他答案,所以我认为可能还可以。
      【解决方案5】:

      根据您的具体最终目标,最简单的方法可能是尝试对其进行格式化并处理异常。

      Convert.ToInt32(yourString, 16)
      

      然后只捕获潜在的 FormatException,如果

      value 包含的字符不是基数中的有效数字 由 fromBase 指定。异常信息表明有 如果 value 中的第一个字符无效,则没有要转换的数字; 否则,该消息表明该值包含无效的尾随 字符。

      但在某些情况下,这可能无法满足您的要求,例如,如果您需要确保十六进制数字中只有两位数字。您可以检查返回的 int 是否在正确的范围内,但这会降低这种方法的整体简单性。不过,我仍然比正则表达式更喜欢它。对于大多数人来说,代码也会更容易阅读,因为正则表达式有时不是很直观,仅看一眼就无法理解。

      虽然这并没有考虑区分大小写,但大多数情况下不会关心这一点,如果最终目标是呈现数字,或者将它们传递给重要的第三方,只需发送字符串大写。

      【讨论】:

        猜你喜欢
        • 2015-05-23
        • 2015-08-28
        • 2012-07-20
        • 2020-03-23
        • 2017-08-12
        • 1970-01-01
        • 2014-11-14
        • 2014-03-19
        相关资源
        最近更新 更多