A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© FrancisTan 中级黑马   /  2014-7-9 15:10  /  1335 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 FrancisTan 于 2014-7-10 08:51 编辑

我们经常用到Convet.ToInt32这个函数,
想请教各位大神,它到底是怎么实现将
一个字符串(当然得是数字)转换成int类型的?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

7 个回复

倒序浏览
你可以试试用这个小工具,可以看 ConvertToInt32 内部代码实现
http://pan.baidu.com/s/1pJnvEob

点评

reflect 反编译这个软件比较好,赞一个  发表于 2014-7-10 20:51

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
这个知识点我和int.Parse()死记住的。。
回复 使用道具 举报
_xixi_ 发表于 2014-7-9 15:46
你可以试试用这个小工具,可以看 ConvertToInt32 内部代码实现
http://pan.baidu.com/s/1pJnvEob ...

谢谢,我去试试!
回复 使用道具 举报
  1. public static int ToInt32(string value)
  2. {
  3.         if (value == null)
  4.         {
  5.                 return 0;
  6.         }
  7.         return int.Parse(value, CultureInfo.CurrentCulture);
  8. }
复制代码

在内部其实也是调用了int.Parse
  1. public static int Parse(string s, IFormatProvider provider)
  2. {
  3.         return Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.GetInstance(provider));
  4. }
复制代码

int.Parse内部有调用了Number.ParseInt32
  1. [SecuritySafeCritical]

  2. internal unsafe static int ParseInt32(string s, NumberStyles style, NumberFormatInfo info)
  3. {
  4.         byte* stackBuffer = stackalloc byte[(UIntPtr)Number.NumberBuffer.NumberBufferBytes / 1];
  5.         Number.NumberBuffer numberBuffer = new Number.NumberBuffer(stackBuffer);
  6.         int result = 0;
  7.         Number.StringToNumber(s, style, ref numberBuffer, info, false);
  8.         if ((style & NumberStyles.AllowHexSpecifier) != NumberStyles.None)
  9.         {
  10.                 if (!Number.HexNumberToInt32(ref numberBuffer, ref result))
  11.                 {
  12.                         throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
  13.                 }
  14.         }
  15.         else
  16.         {
  17.                 if (!Number.NumberToInt32(ref numberBuffer, ref result))
  18.                 {
  19.                         throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
  20.                 }
  21.         }
  22.         return result;
  23. }
复制代码

Number.ParseInt32 最终实现了转换

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
楼上回答的那个网盘的reflector 这个工具最好了
回复 使用道具 举报
蒽,reflector装好了,蛮好用的,谢谢推荐!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马