uint color;
bool parsedhex = uint.TryParse(TextBox1.Text, out color);
//where Text is of the form 0xFF0000
if(parsedhex)
//...
は機能しません。何が間違っているのですか?16進数値を解析してuintに変換する方法は?
uint color;
bool parsedhex = uint.TryParse(TextBox1.Text, out color);
//where Text is of the form 0xFF0000
if(parsedhex)
//...
は機能しません。何が間違っているのですか?16進数値を解析してuintに変換する方法は?
は、あなたが16進値の解析を提供TryParse
コールにNumberStyleパラメータを追加し、オーバーロードTryParse()
を使用することができます
Convert.ToUInt32(hex, 16) //Using ToUInt32 not ToUInt64, as per OP comment
何かを覚えておいてください(この特定の整数の変換には当てはまらないかもしれませんが...)...入力が悪い場合、Convert.ToDouble対Double.TryParseのように、Convert.ToUInt32はUInt32.TryParseよりも遅くなります: http://stackoverflow.com/questions/586436/double-tryparse-or-double-convert-what-is-faster-and-more-safe/586539#586539また、それはいつもそれが何を変換しているのか分からない:http:///tackoverflow.com/questions/586436/double-tryparse-or-double-convert-what-is-faster-and-more-safe/586460#586460 – Triynko
@Triynkoは言ったように、これは責任があるので、これはプロセスが間違っています例外をスローする例外をスローするのではなく、成功または失敗を示すブール値を返すので、uint.TryParseが望ましいでしょう。 – Zenexer
このConvert.ToUInt32でのアプローチは、入力の一部としてプレフィックス '0x'を扱います。 –
など
string hexNum = "0xFFFF";
string hexNumWithoutPrefix = hexNum.Substring(2);
uint i;
bool success = uint.TryParse(hexNumWithoutPrefix, System.Globalization.NumberStyles.HexNumber, null, out i);
を試してみてください。 NumberStyles.HexNumber
を使用すると、文字列を16進数で渡すことができます。
注:NumberStyles.HexNumber
の問題は、それがサポートがプレフィックス(。すなわち0x
、&H
、または#
)で値を解析していないということですので、あなたが値を解析しようとする前にそれを取り除くために持っています。
基本的にあなたがこれを行うだろう:
uint color;
var hex = TextBox1.Text;
if (hex.StartsWith("0x", StringComparison.CurrentCultureIgnoreCase) ||
hex.StartsWith("&H", StringComparison.CurrentCultureIgnoreCase))
{
hex = hex.Substring(2);
}
bool parsedSuccessfully = uint.TryParse(hex,
NumberStyles.HexNumber,
CultureInfo.CurrentCulture,
out color);
NumberStyles列挙型を使用する方法の例については、この記事を参照してください:ここでhttp://msdn.microsoft.com/en-us/library/zf50za27.aspx
は、try-解析形式の関数である:
private static bool TryParseHex(string hex, out UInt32 result)
{
result = 0;
if (hex == null)
{
return false;
}
try
{
result = Convert.ToUInt32(hex, 16);
return true;
}
catch (Exception exception)
{
return false;
}
}
を
これはどの言語ですか?言語のタグはどうですか? –
これはC#のように強烈に見えますが、これまでの回答ではこれを扱っていますが、タグは本当に良いアイデアでした。 –