web-dev-qa-db-ja.com

「0x」で始まる16進値を含む文字列を整数またはlongに変換します

「0x310530」などの文字列値をC#で整数値に変換するにはどうすればよいですか?

私はint.TryParseを試しました(そしてint.TryParseでもSystem.Globalization.NumberStyles.Any)が機能しません。

PDATE: Convert.ToInt64またはConvert.ToInt32は、末尾の「0x」を削除しなくても機能するようです。

_long hwnd = Convert.ToInt64("0x310530", 16);
_

Convert.ToInt64 Method (String, Int32)のドキュメントはこう言っています:

「fromBaseが16の場合、valueパラメータで指定した数の前に「0x」または「0X」を付けることができます。」

ただし、例外を発生させないTryParseのようなメソッドをお勧めします。

21
Alex Vang
int value = (int)new System.ComponentModel.Int32Converter().ConvertFromString("0x310530");
25
Hans Passant

から [〜#〜] msdn [〜#〜]

NumberStyles.AllowHexSpecifier

数値ストリングが16進値を表すことを示します。有効な16進数値には、0〜9の数字と16進数のA〜Fおよびa〜fが含まれます。このスタイルを使用して解析される文字列の前に「0x」または「&h」を付けることはできません

だからあなたは0x接頭辞:

string s = "0x310530";
int result;

if (s != null && s.StartsWith("0x") && int.TryParse(s.Substring(2),
                                                    NumberStyles.AllowHexSpecifier,
                                                    null,
                                                    out result))
{
    // result == 3212592
}
13
dtb