C#将字符串解析为Int32 - 值过大

3
我从外部接口接收到一个字符串,其中包含一个 INT32 值。这个值代表着带符号的整数 "-100",因此看起来像是这个字符串 "4294967196"。 如果它看起来像 "-100",我可以使用 Int32.TryParse() 将其转换为带符号值。 但在我的情况下,它将值按原样解释,并告诉我该值太大(>2.147.483.647)。 有什么解决方法可以让它正常工作?如何告诉解析器前导的 1 不是数字? 编辑: 对于我的不准确之处表示抱歉。我接收到的值是一个看起来像这样的字符串 "4294967196"。它代表一个值为-100的Uint32。如果接口返回一个包含"-100"的字符串,那么就可以直接使用Int32.TryParse()。这就是我想表达的。

1
“Leading 1” 是什么意思? - usr
2
(int) (uint.Parse("4294967196"))有什么问题? - Skiminok
2
我漏掉了什么吗?你得到了一个字符串 "-100",它等价于"4294967196"?“如果它看起来像 -100 我可以使用 Int32.TryParse() 将其转换为有符号值”的意思我不是很明白,因为对我而言,"-100"就是"-100"。还有,“领先的1不是数字”是什么意思? - wkl
@skiminok,你应该将那个发表为答案。 - AHM
我仍然不明白一个字符串“-100”如何转换为“4294967196”? 我在VS中尝试了int i = -100; 然后string s = i.ToString(); s保持“-100”,如果有人能解释一下,我会非常感激。 - Habib
@Habib.OSU - 经过编辑后更有意义 - 他从外部源获取了字符串“4294967196”,它代表了一个值为-100的无符号整数。 - wkl
1个回答

10

使用uint.TryParse()并将结果转换为int

string s = "4294967196";
uint ux;
int x = 0;
if (uint.TryParse(s, out ux))
{
    x = (int)ux;
}
// x = -100

啊,是的,@Habib 最先修好了它。 - Kendall Frey
我似乎没有添加评论的能力(太新了?),但是我可以看到Habib的答案有一个小问题。一个UInt可以正确解析为一个值,而显式的Int32转换会失败。这一行:x = (int)ux;如果字符串的值超过2,147,483,647,则会抛出异常。不确定是否有问题,但可能需要进行一些小的编码更改来处理它。 - CosmicFreddy
值得注意的是,在已检查的上下文中,这种方法不起作用,因为它会抛出OverflowException异常。 - David Anderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接