如何将int转换为uint

时间:2012-11-08 14:08:48

标签: c#

我的int变量值为820924 当我试图像这样转换它时:

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

它不起作用

这不起作用

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

我收到“指定的演员表无效”。异常。

数据存储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

4 个答案:

答案 0 :(得分:36)

首先,您应该检查您的值的类型。您可以通过调用obj.GetType()方法(直接在代码中或在立即窗口中)来执行此操作。

如果是int,那么你可以这样做:

uint u = (uint) (int) obj;

请注意,它与您的广告素材不同,因为强制转换int然后转换为uint,而您正在尝试施放uintint无法投放到uint,这就是您获得InvalidCastException的原因。 int只能转换uint。令人困惑的是,转换强制转换运算符在代码中看起来相同:u = (uint) x

您可以做的更简单的事情是从Convert类调用特定方法:

uint u = Convert.ToUInt32(x);

答案 1 :(得分:3)

问题是int存储为objectInt派生自对象,但uint并非来自int,因此您无法将int存储为objectuint。首先,您必须将其转换为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 

答案 2 :(得分:1)

如果Index是一个字符串,或者在转换为字符串时具有类似数字的表示,您可以尝试:

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

答案 3 :(得分:0)

Index属性可能返回String或其他内容。您可以执行以下操作:

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

Convert.ToUInt32重载了可以转换uint的所有相关类型。