перевод UInt64 числа из десятичной системы счисления в двоичную

238
10 июня 2018, 23:30

Есть, к примеру,

randomInt = 5054385757817110541;
byte[] buf = BitConverter.GetBytes(randomInt);
string binTmp = string.Empty;
foreach (byte b in buf)
  binTmp += Convert.ToString(b, 2).PadLeft(8,'0');

Переменная randmonInt типа UInt64. По идее, в binTmp должна быть строка следующего вида

100011000100100110010010001000101000100011110111000000000001101

Однако в этой переменной содержится следующее значение:

0000110110000000011110110100010000010001110010010010010001000110

Помогите разобраться, что я делаю не так?

Answer 1

Как уже в комментариях сказали, есть перегрузка с которой можно перевести Int64 сразу в двоичную.

UInt64 randomInt = 5054385757817110541;
string bit = Convert.ToString((long)randomInt, 2);

Что касается конкретно вашей проблемы, то тут ответ прост: Endian. Дело в том, что BitConverter конвертирует входной объект в соответствии с порядком байт процессора, а у x86 little endian. То есть при конвертации вы получаете по сути перевёрнутый массив, поэтому достаточно будет просто развернуть его.

UInt64 randomInt = 5054385757817110541;
byte[] buf = BitConverter.GetBytes(randomInt);
buf = buf.Reverse().ToArray();
string binTmp = string.Empty;
foreach (byte b in buf)
   binTmp += Convert.ToString(b, 2).PadLeft(8, '0');
READ ALSO
Простое шифрование файла на C#

Простое шифрование файла на C#

У меня простая windows formДве кнопки: одна шифрует файл любым способом, сохраняет файл и в конце расширения дописывает

280
Как получить нажатие клавиши без вывода ее в консоль

Как получить нажатие клавиши без вывода ее в консоль

Имею вот такую вот простенькую реализацию игры Mined Out:

225
Почему не сохраняет в базу данных данные [закрыт]

Почему не сохраняет в базу данных данные [закрыт]

Почему не сохраняет в базу данных (SQL Server) данные из dataGridView? Код без ошибок

188