黑马程序员技术交流社区

标题: convert的内部实现问题 [打印本页]

作者: FrancisTan    时间: 2014-7-9 15:10
标题: convert的内部实现问题
本帖最后由 FrancisTan 于 2014-7-10 08:51 编辑

我们经常用到Convet.ToInt32这个函数,
想请教各位大神,它到底是怎么实现将
一个字符串(当然得是数字)转换成int类型的?
作者: _xixi_    时间: 2014-7-9 15:46
你可以试试用这个小工具,可以看 ConvertToInt32 内部代码实现
http://pan.baidu.com/s/1pJnvEob
作者: 小郭zaiheima    时间: 2014-7-9 17:29
这个知识点我和int.Parse()死记住的。。
作者: FrancisTan    时间: 2014-7-10 08:46
_xixi_ 发表于 2014-7-9 15:46
你可以试试用这个小工具,可以看 ConvertToInt32 内部代码实现
http://pan.baidu.com/s/1pJnvEob ...

谢谢,我去试试!
作者: 追梦无悔    时间: 2014-7-10 09:48
  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 最终实现了转换
作者: czwanglei    时间: 2014-7-10 20:52
楼上回答的那个网盘的reflector 这个工具最好了
作者: FrancisTan    时间: 2014-7-11 01:06
蒽,reflector装好了,蛮好用的,谢谢推荐!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2