请问我在用BitConvert.ToUInt16();方法时返回的数是怎么算的?
这有啥好算的.touint16的意思是转成16位无符号整数.
跟16进制都没点卵关系.你看下他的参数是什么.如果是1个byte.那直接赋值都可以.根本不用运算.
按照16进制来计算的
能不能给一个具体的演算步骤呢
参考http://bbs.csdn.net/topics/391976162?page=1
反编译的结果
using System; using System.Security; namespace System { [__DynamicallyInvokable] public static class BitConverter { [__DynamicallyInvokable] public static readonly bool IsLittleEndian = true; [__DynamicallyInvokable] public static byte[] GetBytes(bool value) { return new byte[] { value ? 1 : 0 }; } [__DynamicallyInvokable] public static byte[] GetBytes(char value) { return BitConverter.GetBytes((short)value); } [__DynamicallyInvokable, SecuritySafeCritical] public unsafe static byte[] GetBytes(short value) { byte[] array; byte[] expr_06 = array = new byte[2]; byte* ptr; if (expr_06 == null || array.Length == 0) { ptr = null; } else { fixed (byte* ptr = &array[0]) { } } *(short*)ptr = value; ptr = null; return expr_06; } [__DynamicallyInvokable, SecuritySafeCritical] public unsafe static byte[] GetBytes(int value) { byte[] array; byte[] expr_06 = array = new byte[4]; byte* ptr; if (expr_06 == null || array.Length == 0) { ptr = null; } else { fixed (byte* ptr = &array[0]) { } } *(int*)ptr = value; ptr = null; return expr_06; } [__DynamicallyInvokable, SecuritySafeCritical] public unsafe static byte[] GetBytes(long value) { byte[] array; byte[] expr_06 = array = new byte[8]; byte* ptr; if (expr_06 == null || array.Length == 0) { ptr = null; } else { fixed (byte* ptr = &array[0]) { } } *(long*)ptr = value; ptr = null; return expr_06; } [__DynamicallyInvokable, CLSCompliant(false)] public static byte[] GetBytes(ushort value) { return BitConverter.GetBytes((short)value); } [__DynamicallyInvokable, CLSCompliant(false)] public static byte[] GetBytes(uint value) { return BitConverter.GetBytes((int)value); } [__DynamicallyInvokable, CLSCompliant(false)] public static byte[] GetBytes(ulong value) { return BitConverter.GetBytes((long)value); } [__DynamicallyInvokable, SecuritySafeCritical] public unsafe static byte[] GetBytes(float value) { return BitConverter.GetBytes(*(int*)(&value)); } [__DynamicallyInvokable, SecuritySafeCritical] public unsafe static byte[] GetBytes(double value) { return BitConverter.GetBytes(*(long*)(&value)); } [__DynamicallyInvokable] public static char ToChar(byte[] value, int startIndex) { if (value == null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.value); } if ((ulong)startIndex >= (ulong)((long)value.Length)) { ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.startIndex, ExceptionResource.ArgumentOutOfRange_Index); } if (startIndex > value.Length - 2) { ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall); } return (char)BitConverter.ToInt16(value, startIndex); } [__DynamicallyInvokable, SecuritySafeCritical] public unsafe static short ToInt16(byte[] value, int startIndex) { if (value == null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.value); } if ((ulong)startIndex >= (ulong)((long)value.Length)) { ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.startIndex, ExceptionResource.ArgumentOutOfRange_Index); } if (startIndex > value.Length - 2) { ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall); } if (startIndex % 2 == 0) { return *(short*)(&value[startIndex]); } if (BitConverter.IsLittleEndian) { return (short)((int)(*(&value[startIndex])) | (int)(&value[startIndex])[1] << 8); } return (short)((int)(*(&value[startIndex])) << 8 | (int)(&value[startIndex])[1]); } [__DynamicallyInvokable, SecuritySafeCritical] public unsafe static int ToInt32(byte[] value, int startIndex) { if (value == null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.value); } if ((ulong)startIndex >= (ulong)((long)value.Length)) { ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.startIndex, ExceptionResource.ArgumentOutOfRange_Index); } if (startIndex > value.Length - 4) { ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall); } if (startIndex % 4 == 0) { return *(int*)(&value[startIndex]); } if (BitConverter.IsLittleEndian) { return (int)(*(&value[startIndex])) | (int)(&value[startIndex])[1] << 8 | (int)(&value[startIndex])[2] << 16 | (int)(&value[startIndex])[3] << 24; } return (int)(*(&value[startIndex])) << 24 | (int)(&value[startIndex])[1] << 16 | (int)(&value[startIndex])[2] << 8 | (int)(&value[startIndex])[3]; } [__DynamicallyInvokable, SecuritySafeCritical] public unsafe static long ToInt64(byte[] value, int startIndex) { if (value == null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.value); } if ((ulong)startIndex >= (ulong)((long)value.Length)) { ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.startIndex, ExceptionResource.ArgumentOutOfRange_Index); } if (startIndex > value.Length - 8) { ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall); } if (startIndex % 8 == 0) { return *(long*)(&value[startIndex]); } if (BitConverter.IsLittleEndian) { ulong arg_7E_0 = (ulong)((int)(*(&value[startIndex])) | (int)(&value[startIndex])[1] << 8 | (int)(&value[startIndex])[2] << 16 | (int)(&value[startIndex])[3] << 24); int num = (int)(&value[startIndex])[4] | (int)(&value[startIndex])[5] << 8 | (int)(&value[startIndex])[6] << 16 | (int)(&value[startIndex])[7] << 24; return (long)(arg_7E_0 | (ulong)((ulong)((long)num) << 32)); } int num2 = (int)(*(&value[startIndex])) << 24 | (int)(&value[startIndex])[1] << 16 | (int)(&value[startIndex])[2] << 8 | (int)(&value[startIndex])[3]; return (long)((ulong)((int)(&value[startIndex])[4] << 24 | (int)(&value[startIndex])[5] << 16 | (int)(&value[startIndex])[6] << 8 | (int)(&value[startIndex])[7]) | (ulong)((ulong)((long)num2) << 32)); } [__DynamicallyInvokable, CLSCompliant(false)] public static ushort ToUInt16(byte[] value, int startIndex) { if (value == null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.value); } if ((ulong)startIndex >= (ulong)((long)value.Length)) { ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.startIndex, ExceptionResource.ArgumentOutOfRange_Index); } if (startIndex > value.Length - 2) { ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall); } return (ushort)BitConverter.ToInt16(value, startIndex); } } }