Задать вопрос
HunterWLN1981
@HunterWLN1981
СисАдмин и не только

Как в обратном порядке разобрать процедуру?

this.expDate = new DateTime((long) ((uint) outputBuffer[9] << 24 | (uint) outputBuffer[8] << 16 | (uint) outputBuffer[7] << 8 | (uint) outputBuffer[6]) << 32);


или

uint num2 = (uint) (outputBuffer[9] << 0x18); // outputBuffer[9] =  8
num2 |= (uint) (outputBuffer[8] << 0x10); // outputBuffer[8] = 208
num2 |= (uint) (outputBuffer[7] << 8); // outputBuffer[7] = 128
num2 |= outputBuffer[6]; // outputBuffer[9] = 34


В итоге получаю дату 636116544010000000 в формате Ticks. Дата пример.

Как обратно собрать ?
  • Вопрос задан
  • 111 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Sumor
BitConverter.GetBytes(uint)
Преобразует число в массив байтов.

Кстати то что у вас реализовано делается там же функцией BitConverter.ToUInt32(byte[], int)
Ответ написан
Комментировать
на мой взгляд то, что Вы написали первое
this.expDate = new DateTime((long) ((uint) outputBuffer[9] << 24 | (uint) outputBuffer[8] << 16 | (uint) outputBuffer[7] << 8 | (uint) outputBuffer[6]) << 32);

не то же самое что написали после "или" (так как в конце идет сдвиг влево на 32)
Как мне кажется вторая запись эквивалентна вот этой:
uint num2 = (uint) (outputBuffer[9] << 0x18); // outputBuffer[9] = 8
num2 |= (uint) (outputBuffer[8] << 0x10); // outputBuffer[8] = 208
num2 |= (uint) (outputBuffer[7] << 8); // outputBuffer[7] = 128
num2 |= outputBuffer[6]; // outputBuffer[9] = 34

8*2^24 + 208*2^16 + 128*2^8 + 34 = 00001000110100000000010000100010
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы