2

問題の原因は何ですか?私のメソッドは正しくない int 値を返します。AB や DC などの 16 進値を指定すると int = 0 が返されますが、16 進 = 22 を指定すると int = 22 が返されます (この場合、int は 34 である必要があります)。

public int StatusBit(int Xx, int Rr)  {
        int Number;
        int.TryParse(GetX(Xx,Rr), out Number);
            return Number;
    }

Number = Convert.ToInt32(GetX(Xx,Rr)); を使用しようとしました。ただし、同じ結果が得られますが、文字を含むものについては 0 ではなく null になります。

4

4 に答える 4

4

Convert.ToInt32(string, int)代わりに使用してください。そうすれば、数値を解釈する必要のあるベースを指定できます。たとえば、

return Convert.ToInt32(GetX(Xx, Rr), 16);

TryParse(また、解析が失敗したことを示唆する戻り値をチェックしません。)

10進数と16進数の両方が必要な場合は、数値の外観に応じて分岐し、基数10または基数16を使用する必要があります。たとえば、16進数が常にで始まる0x場合は、次の行に沿って何かを使用できます。

string temp = GetX(Xx, Rr);
return Convert.ToInt32(temp, temp.StartsWith("0x") ? 16 : 10);

しかし、それは(もしあれば)2つをどのように区別するかによって異なります。もちろん、すべてが16進数であれば、そのような必要はありません。

于 2013-03-05T13:46:54.187 に答える
4

使用NumberStyles.HexNumber:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        string text = "22";
        int value;
        int.TryParse(text, NumberStyles.HexNumber, 
                     CultureInfo.InvariantCulture, out value);
        Console.WriteLine(value); // Prints 34
    }
}

ところで、値を解析できない場合、本当に何も言わずに 0 を返したいですか? そうでない場合は、の戻り値を使用してint.TryParse、解析が成功したかどうかを判断します。(これが、元のコードで "AB" に対して 0 を返す理由です。)

于 2013-03-05T13:49:54.917 に答える
1

int.TryParse10進数の整数を解析します。

Convert.ToUInt32(hex, 16)代わりに使用してください

于 2013-03-05T13:47:16.967 に答える