Что мне отдает BitConverter.ToUInt32? - C#
Формулировка задачи:
Тестирую вот такой вот незамысловатый код, который естественно писал не я иначе бы понимал что он делает...
Отдает он мне вот это: 521185472
Эти цифры заставили задуматься о нескольких вещах:
1. Что такое 521185472 ? Почему 521185472, а не 1921681631 ?
2. Я правильно понимаю что я выделяю память new byte[] массиву байтов { 192, 168, 16, 31 } ?
3. Зачем я передаю ноль вторым параметром?
4. Я правильно понимаю, что приведенный выше код преобразует массив байтов в базовый тип (в нашем случае Int32) ?
5. Что такое массив байтов и чем он отличается от массива интов например?
var myIp = BitConverter.ToUInt32(new byte[] { 192, 168, 16, 31 }, 0);
Console.WriteLine(myIp);Решение задачи: «Что мне отдает BitConverter.ToUInt32?»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace bits
{
class Program
{
static void Main(string[] args)
{
// without BitConverter
uint uintVal = 0;
byte[] arr = {192, 168, 1, 100};
for (int i = 0; i < 4; i++)
{
uintVal = arr[i]; // присваиваю 4 бита в 32-битное число
uintVal <<= 8; // сдвигаю на 8 бит влево присвоенное выше число освобождая таким образом место для следующего 8-битного числа
}
Console.WriteLine(uintVal); // получаю число 25600, а хочется получить 1677830336
// with BitConverter
uint uintVal2 = BitConverter.ToUInt32(arr, 0);
Console.WriteLine(uintVal2); // получаю число 1677830336
}
}
}