【问题标题】:Get a Numeric String and Check if is a Hex or Dec number C#获取数字字符串并检查是十六进制还是十进制数 C#
【发布时间】:2015-05-23 20:29:26
【问题描述】:

我正在开发一个带有 USB 仿真键盘读卡器的简单读卡器。 我从卡中收到一个字符串,我想检查该字符串是数字还是十六进制数。如果是十六进制数字,我只想接受该字符串的值。

由于我使用的是 C#,我知道我可以使用正则表达式,但问题是十六进制数字也只能有数字而不能有字母。

有人可以帮帮我吗? 谢谢

我的代码:

    public string ProcessReadContentNumber(string ReadContentNumber)
    {
        Int64 cNumber;
        var hexStyle = System.Globalization.NumberStyles.HexNumber;

        //  Check If is HEX
        if (Int64.TryParse(ReadContentNumber, hexStyle, CultureInfo.CurrentCulture, out cNumber))
        {
            String First3Byte = ReadContentNumber.Substring(0, 6);

            String NextBytes = ReadContentNumber.Substring(6);

            //Convert First 3 Bytes
            Int64 decAgain1 = int.Parse(First3Byte, System.Globalization.NumberStyles.HexNumber);

            //Convert Last 4 Bytes
            Int64 decAgain2 = Int64.Parse(NextBytes, System.Globalization.NumberStyles.HexNumber);

            String FinalNumber = decAgain1.ToString() + "-" + decAgain2.ToString();

            return FinalNumber;   
        }

        return null;
    }

【问题讨论】:

  • 我希望你得到的十六进制是 0x ......!如果是这样,它很容易区分!
  • 如果不是,0x 装饰那么它根本不可能,是 "123" 123 还是 291 ?很难相信设备接口会被设计成这样的问题......

标签: c# regex hex


【解决方案1】:

为什么需要为此使用正则表达式?尝试解析它:

string maybeHex = "fffe";
int number;
var hexStyle = System.Globalization.NumberStyles.HexNumber;
if( int.TryParse(maybeHex, hexStyle, CultureInfo.CurrentCulture, out number))
{
    // valid
    Console.WriteLine("Valid hex number: " + number);
} 

它拒绝像978787879 这样的输入,即使它是一个有效的整数。

【讨论】:

  • 我会尝试一下 Tim,但由于您的解决方案拒绝像 938938 这样的输入,因此可能是我需要的。谢谢
  • Time Schmelter 该代码的问题旨在接受以下数字:1111111
  • @user3178157:但 1111111 是十六进制数的有效值,它的十进制表示为 17895697。binaryhexconverter.com/hex-to-decimal-converter
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 2017-08-12
  • 2018-06-27
  • 2016-06-11
  • 2018-01-31
  • 2011-04-14
  • 2014-03-07
相关资源
最近更新 更多