2014-10-24 2 views
1

Я прочитал значение UInt32 как строку из файла XML. И затем я хочу преобразовать его в UInt32.Преобразование из строки в UInt32 - C#

UInt32 res = Convert.ToUInt32("0x00B73004", 16); 

Но после преобразования полученного значения является: 12005380

Почему это так?

+5

Вы ожидаете другого результата? Если да, то почему? –

+0

Я ожидаю сохранения значения: ** 0x00B73004 **, поэтому я немного смущен, возможно, что я что-то смешал ... –

+1

@ user2653268 вы немного смущены о значении и его представлении ... – giammin

ответ

4

Он работает так, как планировалось. 0xB73004 (с любым числом ведущих нулей) - 12005380 в десятичной системе обозначений.

>>> hex(12005380) 
'0xb73004' 
3

Как и другие ответы предполагают, то шестнадцатеричный номер B73004 равно десятичное число 12005380.

Что вы можете забыть это UInt32 не может содержать любое форматирование. UInt32 - это всего лишь комбинация из 32 бит, которая представляет собой число; ценность. Как это число отображается полностью зависит от вас. Вы можете отобразить его как шестнадцатеричное, бинарное или десятичное число. Пример:

Console.WriteLine("{0} = {0:X}", res); 

Вы можете даже сказать Visual Studio для отображения значений в шестнадцатеричном формате с правой кнопкой мыши на окне Watch и выберите «Hexidecimal Display».

Это значение то же самое с номером точки плавания: оно не содержит никакой информации, если оно должно быть отформатировано точкой или запятой. Это зависит от (текущей) культуры. Также для DateTime: содержит дату и время без форматирования. Программист может определить, каким образом должны отображаться, что дата и время (например, как: dd-MM-yyyy или yyyy-MM-dd и т.д.)

1

0x00B73004 просто hexadecimal notation из 12005380. Префикс "0x" является наиболее распространенным обозначением для обозначения шестнадцатеричных констант.

Поскольку вы спрашиваете почему здесь математическая сторона;

00B73004 = * 16 + * 16 + В * 16 + * 16 + * 16 + * 16 + * 16 + * 16

= 0 + 0 + * 16 + * 16 + * 16 + * 16 + * 16 + * 16

= 0 + 0 + 11534336 + 458752 + 12288 + 0 + 0 + 4

= 12005380

Кстати B гекс = 11 декабря

Вы можете сохранить эту шестнадцатеричную нотацию в числовом значении типа;

uint i = 0x00B73004; 

В этом нет ничего плохого. Вы можете увидеть значение base 10 на отладчике.

enter image description here