-1

我一直试图弄清楚 mscorlib 是如何Convert.ToInt32(byte)工作的,因为我只能访问一个项目的 .Net 2.0。到目前为止,尝试使用 .Net 反射器打开该 dll 并没有帮助尝试查看 .Net 如何在 .Net 4.5 中处理它(同样,我无权访问该项目)。

有人可以解释一下 Convert.ToInt32(byte) 如何从一个字节转换和创建一个 32 位有符号整数,以及我如何在代码中做到这一点?

我注意到下面的代码有很大的不同。它只是为 int32 设置的下限和上限,如果在外面则返回 0?

Console.WriteLine(
     Convert.ToInt32(buffer[i]).ToString() + 
                                         " " + 
     BitConverter.ToInt32(buffer, i).ToString()
 );

Convert.ToInt32 与 BitConverter.ToInt32

4

3 回答 3

3

来自 MSDN 文档https://msdn.microsoft.com/en-us/library/system.bitconverter.toint32(v=vs.80).aspx

BitConverter.ToInt32 从您给它的数组中的位置开始占用 4 个字节,并将其转换为有符号整数。

Convert.ToInt32 占用 1 个字节并将其“扩展”为 Int32 类型。

给定一个长度为 4 的字节数组,称为缓冲区,然后是 BitConverter.ToInt32(buffer, 0)

将计算以下内容:

buffer[3] * 16777216 + buffer[2] * 65536 + buffer[1] * 256 + buffer[0]

另一方面,Convert.ToInt32(buffer[0]) 将计算以下内容:

(Int32)buffer[0]
于 2015-09-13T09:33:57.593 回答
1

BitConverter.ToInt32(byte[] buffer, int index)总是占用 4 个字节,Convert.ToInt32(byte b)只占用 1 个字节。

于 2015-09-13T09:34:21.583 回答
0

Convert.ToInt32()将指定的值转换为 32 位有符号整数。whileBitConvertor.ToInt32()返回从字节数组中指定位置的四个字节转换而来的 32 位有符号整数。

这是两者的 MSDN 文档以及示例BitConvertor

转换.ToInt32

于 2015-09-13T09:37:45.020 回答