【问题标题】:Why "0x5" is not parsed as a valid Hex number? [duplicate]为什么“0x5”没有被解析为有效的十六进制数? [复制]
【发布时间】:2019-10-07 13:31:50
【问题描述】:

我正在尝试检查字符串是否包含有效的十六进制数。

我正在使用Check if string is valid represantion of HEX number 中记录的方法。

使用以下代码:

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        int temp;
        bool b = int.TryParse("0x5", System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out temp);
        System.Console.Write("{0} : {1}", b, temp);
    }
}

我在输出端得到:False : 0

这里有什么问题?

【问题讨论】:

  • 它似乎无法解析“0x”部分,如果你只写例如 int.TryParse("5"...) 那么它可以工作(也 int.TryParse("A "....) 有效)。

标签: c#


【解决方案1】:

来自docs

允许十六进制说明符

表示数字字符串表示一个十六进制值。有效的十六进制值包括数字 0-9 以及十六进制数字 A-F 和 a-f。 使用此样式解析的字符串不能以“0x”或“&h”为前缀。使用 AllowHexSpecifier 样式解析的字符串将始终被解释为十六进制值。唯一可以与 AllowHexSpecifier 组合的标志是 AllowLeadingWhite 和 AllowTrailingWhite。 NumberStyles 枚举包括一个复合样式 HexNumber,它由这三个标志组成。

(强调我的。)

【讨论】:

  • 对我不利 :)... 我最终使用 Regex 来检测。谢谢
  • 尽管有它的名字,AllowHexSpecifier 不允许任何十六进制说明符。它只是将事物解释为十六进制。 :-/
猜你喜欢
  • 2019-08-31
  • 2022-11-16
  • 2012-05-28
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多