Как преобразовать int в uint - программирование
Подтвердить что ты не робот

Как преобразовать int в uint

У меня есть переменная int со значением 820924 когда я пытаюсь преобразовать его так:

(uint)data[structure["MICROSECONDS"].Index]

это не работает

Это не сработает

unchecked((uint)data[structure["MICROSECONDS"].Index])

Я получаю Specified cast is not valid. исключение.

object хранилища данных, но во время выполнения я должен попытаться преобразовать в int. Я почти уверен. Я напечатал значение объекта, это было 820924, однако я не знаю, как напечатать тип объекта, но это должно быть int.

Код:

object value = data[structure["MICROSECONDS"].Index];
Console.WriteLine("xx MICROSECONDS type " + value.GetType());
Console.WriteLine("xx casting " + value);
Console.WriteLine("xx cast ok" + (uint)value);

Результат:

xx MICROSECONDS type System.Int32
xx casting 820924
4b9b3361

Ответ 1

Прежде всего, вы должны проверить тип своего значения. Вы можете сделать это, вызвав метод obj.GetType() (либо в вашем коде напрямую, либо в окне Immediate).

Если это int, вы можете сделать:

uint u = (uint) (int) obj;

Обратите внимание, что он отличается от вашего приведения, потому что он отличает до int, а затем преобразует в uint, когда вы пытались лить до uint. int нельзя отнести к uint, поэтому вы получаете InvalidCastException. int может быть только преобразован в uint. Запутать, что оба оператора конверсии и cast выглядят одинаково в коде: u = (uint) x.

Проще, что вы можете сделать, это вызов определенного метода из класса Convert:

uint u = Convert.ToUInt32(x);

Ответ 2

Проблема заключается в том, что int хранится как object. int происходит от объекта, но uint не выводится из int, поэтому вы не можете использовать int, хранящийся как object, uint. Сначала вы должны направить его на int, а затем на uint, потому что это действие действительно. Попробуйте сами:

object o = 5;//this is constant that represents int, constant for uint would be 5u
uint i = (uint)o;//throws exception

Но это работает:

object o = 5;
int i = (int)o;
uint j = (uint)i;

или

object o = 5;
uint i = (uint)(int)o; //No matter how this looks awkward 

Ответ 3

Если Index является строкой или имеет числовое представление, преобразованное в строку, которую вы можете попробовать:

UInt32 microSecondsIndex;
if(Uint32.TryParse(data[structure["MICROSECONDS"].Index.ToString()],out microSecondsIndex))
{
   //Do Stuff
}
else
{
    //Do error handling
}

Ответ 4

Возможно, свойство Index возвращает строку или что-то еще. Вы можете сделать следующее:

var num = Convert.ToUInt32(data[structure["MICROSECONDS"].Index]);

Convert.ToUInt32 перегружен всеми соответствующими типами, из которых можно преобразовать a uint.