اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
برای تبدیل یک عدد صحیح به هگزا دسیمال معادل و بلعکس از کد زیر استفاده میکنیم.
کدهای بالا بقدر کافی روشن و واضح هستند که نیازی به توضیح اضافی نداشته باشند ولی فرض کنید قصد دارید عدد هگزا دسیمال 20 رقمی زیر را به معادل عدد صحیح آن تبدیل کنید، این عدد نیاز به 80 بیت دارد که امکان ذخیره سازی آن در int و یا long وجود ندارد چون طول آنها بترتیب 32بیت و 64بیت است.
برای حل این مشکل ابتدا ارجاعی از System.Numerics رابه پروژه اضافه کنید سپس به یکی از 2 روش زیر آن را به عدد صحیح تبدیل کنید.
روش اول:
در این روش ابتدا ارقام عدد هگزا دسیمال را در یک آرایه از نوع داده بایت ذخیره کنید سپس آرایه را معکوس کرده و آن را به متد BigInteger پاس دهید. علت معکوس کردن آرایه این است که متد سازنده BigInteger به آرایه little-endian نیاز دارد.
روش دوم:
در این روش باید "0x" را از ابتدای عدد هگزا دسیمال جدا کنید و سپس آن را به BigInteger.Parse پاس دهید.
منابع:
int intValue = 182; string hexValue = intValue.ToString("X"); int intAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
var hexValue = "0x00010471000001BF001F";
روش اول:
byte[] bigNumber = new byte[] { 0, 0, 0, 1, 0, 4, 7, 1, 0, 0, 0, 0, 0, 1, byte.Parse("B", System.Globalization.NumberStyles.HexNumber), byte.Parse("F", System.Globalization.NumberStyles.HexNumber), 0, 0, 1, byte.Parse("F", System.Globalization.NumberStyles.HexNumber) }; Array.Reverse(bigNumber); var bigInt = new System.Numerics.BigInteger(bigNumber);
روش دوم:
var bigint = System.Numerics.BigInteger.Parse("00010471000001BF001F", System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture);
منابع: