黑马程序员技术交流社区
标题:
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
public static int ToInt32(string value)
{
if (value == null)
{
return 0;
}
return int.Parse(value, CultureInfo.CurrentCulture);
}
复制代码
在内部其实也是调用了int.Parse
public static int Parse(string s, IFormatProvider provider)
{
return Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.GetInstance(provider));
}
复制代码
int.Parse内部有调用了Number.ParseInt32
[SecuritySafeCritical]
internal unsafe static int ParseInt32(string s, NumberStyles style, NumberFormatInfo info)
{
byte* stackBuffer = stackalloc byte[(UIntPtr)Number.NumberBuffer.NumberBufferBytes / 1];
Number.NumberBuffer numberBuffer = new Number.NumberBuffer(stackBuffer);
int result = 0;
Number.StringToNumber(s, style, ref numberBuffer, info, false);
if ((style & NumberStyles.AllowHexSpecifier) != NumberStyles.None)
{
if (!Number.HexNumberToInt32(ref numberBuffer, ref result))
{
throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
}
}
else
{
if (!Number.NumberToInt32(ref numberBuffer, ref result))
{
throw new OverflowException(Environment.GetResourceString("Overflow_Int32"));
}
}
return result;
}
复制代码
Number.ParseInt32 最终实现了转换
作者:
czwanglei
时间:
2014-7-10 20:52
楼上回答的那个网盘的reflector 这个工具最好了
作者:
FrancisTan
时间:
2014-7-11 01:06
蒽,reflector装好了,蛮好用的,谢谢推荐!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2