Преобразование байтов в INT64, под капотом - PullRequest
0 голосов
/ 12 декабря 2018

Добрый день.Для текущего проекта мне нужно знать, как типы данных представлены в байтах.Например, если я использую:

long three = 500;var bytes = BitConverter.GetBytes(three);

, я получаю значения 244,1,0,0,0,0,0,0.Я получаю, что это 64-битное значение, и 8 бит идут в бит, таким образом, есть 8 байтов.Но как сделать 244 и 1 макияж 500?Я попробовал Googling, но все, что я получаю, это использую BitConverter.Мне нужно знать, как работает битконвертер под капотом.Если кто-то может указать мне статью или объяснить, как это работает, это будет оценено.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Это довольно просто.

BitConverter.GetBytes((long)1); // {1,0,0,0,0,0,0,0};
BitConverter.GetBytes((long)10); // {10,0,0,0,0,0,0,0};
BitConverter.GetBytes((long)100); // {100,0,0,0,0,0,0,0};
BitConverter.GetBytes((long)255); // {255,0,0,0,0,0,0,0};
BitConverter.GetBytes((long)256); // {0,1,0,0,0,0,0,0}; this 1 is 256
BitConverter.GetBytes((long)500); // {244,1,0,0,0,0,0,0}; this is yours 500 = 244 + 1 * 256

Если вам нужен исходный код, вы должны проверить Microsoft GitHub, поскольку реализация с открытым исходным кодом :) https://github.com/dotnet

0 голосов
/ 12 декабря 2018

Из исходного кода :

// Converts a long into an array of bytes with length 
// eight.
[System.Security.SecuritySafeCritical]  // auto-generated
public unsafe static byte[] GetBytes(long value)
{
    Contract.Ensures(Contract.Result<byte[]>() != null);
    Contract.Ensures(Contract.Result<byte[]>().Length == 8);

    byte[] bytes = new byte[8];
    fixed(byte* b = bytes)
        *((long*)b) = value;
    return bytes;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...