преобразование строки в uint - PullRequest
4 голосов
/ 16 ноября 2010

Я пытаюсь прочитать шестнадцатеричное значение из текстового поля, а затем поместить его в uint, это код:

UInt32 x = Convert.ToUInt32(location_txtbox.ToString());

Почему я хочу передать x некоторому неуправляемому коду изаголовок функции требует DWORD.

Я получаю 'строка ввода не была в правильном формате ошибка?Я пытаюсь ввести такие значения, как 0x7c или 0x777, но получаю ошибки?

Спасибо.

Ответы [ 4 ]

14 голосов
/ 16 ноября 2010

Используйте эту перегрузку Convert.ToUInt32 , где вы указываете базу преобразования. Должен работать с или без ведущего "0x".

UInt32 x = Convert.ToUInt32(location_txtbox.Text, 16);
3 голосов
/ 16 ноября 2010

Предполагая, что location_txtbox является TextBox, вы можете использовать .Text вместо .ToString ().

И я думаю, вам нужно передать 16 как второй параметр для разбора шестнадцатеричного значения: например, Convert.UInt32 (X, 16)

См .: http://msdn.microsoft.com/en-us/library/swz6z5ks.aspx

2 голосов
/ 16 ноября 2010

A) Никогда не используйте Convert, не заключая его в try / catch, или если вы ОЧЕНЬ не уверены, что анализируемый файл будет успешно проанализирован.

B) Используйте uint.TryParse.В частности, используйте тот, который позволяет указать стиль номера.Ссылка для него: http://msdn.microsoft.com/en-us/library/kadka85s.aspx

C) в стиле, который вам понадобится NumberStyles.HexSpecifier

D) Используйте свойство Text, как указано выше.

2 голосов
/ 16 ноября 2010

Convert.ToUInt32 просто звонит UInt32.Parse(String).Если вы вызываете overload , который принимает параметр NumberStyles, вы можете указать, что ваше значение шестнадцатеричное.Проблема в том, что вам придется вырезать ведущий "0x", так как это не разрешено.

var hexNumber = "0x777".Substring(2);
uint.Parse(hexNumber, System.Globalization.NumberStyles.HexNumber)
...