【问题标题】:C# parse string to int32 - value too bigC# 将字符串解析为 int32 - 值太大
【发布时间】:2012-04-24 19:46:51
【问题描述】:

我从外部接口接收到一个字符串,该字符串包含一个INT32 值。这个值代表“-100”——一个有符号的整数——因此,看起来像这个字符串“4294967196”。 如果它看起来像“-100”,我可以使用Int32.TryParse() 将其转换为有符号值。 但在我的情况下,它按原样解释值并告诉我该值太大(> 2.147.483.647)。 有什么解决方法可以让它工作吗?如何告诉解析器前导的 1 不是数字?

编辑:抱歉不准确。我收到的值是一个类似于“4294967196”的字符串。它表示值为 -100 的 Uint32。如果接口将返回一个包含“-100”的字符串,则可以只使用Int32.TryParse()。这就是我想要表达的。

【问题讨论】:

  • “领先1”是什么意思?
  • (int) (uint.Parse("4294967196")) 有什么问题?
  • 我错过了什么吗?你得到一个字符串"-100",它等价于"4294967196"?我不明白“如果它看起来像 -100 我可以使用 Int32.TryParse() 将其转换为有符号值”是什么意思,因为“-100”对我来说是“-100”。而“前导 1 不是数字?” - 这是什么意思?
  • @skiminok 您应该将其发布为答案
  • 我仍然无法理解字符串“-100”如何转换为“4294967196”?我试过在 VS int i=-100;然后字符串 s = i.ToString(); s 持有“-100”,如果有人能解释一下,将不胜感激

标签: c#


【解决方案1】:

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

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

【讨论】:

  • 啊,是的,@Habib 先修好了。
  • 我似乎没有能力添加 cmets(太新?),但 Habib 的回答确实有一个我可以看到的小问题。 UInt 可以正确解析为显式 Int32 强制转换失败的值。如果字符串的值超过 2,147,483,647,则行:x = (int)ux; 将引发异常。不确定这是否是一个问题,但可能需要进行一些小的编码更改来处理。
  • 值得注意的是,这在检查的上下文中不起作用,因为它会抛出一个溢出异常。
猜你喜欢
  • 2011-11-26
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多