BigEndian or LittleEndian read

230
30 марта 2017, 21:49

Я пытаюсь сконвертировать массив из восьми «байт» в unsigned _int64, но получаю

C8BA94B1

вместо нужного

B194BAC8

Я не знаю, как это исправить.

Мой код:

std::array<unsigned __uint64, 8> S;
S = { 177,148,186,200,10,8,245,59 };
unsigned __int64 byteS = (S.at(0)     |
        (S.at(1) << 8  |
        (S.at(2) << 16 |
        (S.at(3) << 24 |
        (S.at(4) << 32 |
        (S.at(5) << 40 |
        (S.at(6) << 48 |
        (S.at(7) << 56;
printf("%X", byteS[0]);

Я пыталась изменить направление 0..7, 7..0, но это не помогло. Что я делаю неправильно?

Answer 1

Конечно, надо бы комментарием, но ни места, ни форматирования...
Распишем подробнее:

int main()
{
    array<unsigned __int64, 8> S;
    S = { 177,148,186,200,10,8,245,59 };
    unsigned __int64 byteS = (S.at(0))     |
        (S.at(1) << 8)  |
        (S.at(2) << 16) |
        (S.at(3) << 24) |
        (S.at(4) << 32) |
        (S.at(5) << 40) |
        (S.at(6) << 48) |
        (S.at(7) << 56);
    printf("S[0] = %016llX,  S[0] << 0   = %016llX\n",S[0],S[0] );
    printf("S[1] = %016llX,  S[1] << 8   = %016llX\n",S[1],S[1] << 8);
    printf("S[2] = %016llX,  S[2] << 16  = %016llX\n",S[2],S[2] << 16);
    printf("S[3] = %016llX,  S[3] << 24  = %016llX\n",S[3],S[3] << 24);
    printf("S[4] = %016llX,  S[4] << 32  = %016llX\n",S[4],S[4] << 32);
    printf("S[5] = %016llX,  S[5] << 40  = %016llX\n",S[5],S[5] << 40);
    printf("S[6] = %016llX,  S[6] << 48  = %016llX\n",S[6],S[6] << 48);
    printf("S[7] = %016llX,  S[7] << 56  = %016llX\n",S[7],S[7] << 56);
    printf("%llX", byteS);
}

Вывод:

S[0] = 00000000000000B1,  S[0] << 0   = 00000000000000B1
S[1] = 0000000000000094,  S[1] << 8   = 0000000000009400
S[2] = 00000000000000BA,  S[2] << 16  = 0000000000BA0000
S[3] = 00000000000000C8,  S[3] << 24  = 00000000C8000000
S[4] = 000000000000000A,  S[4] << 32  = 0000000A00000000
S[5] = 0000000000000008,  S[5] << 40  = 0000080000000000
S[6] = 00000000000000F5,  S[6] << 48  = 00F5000000000000
S[7] = 000000000000003B,  S[7] << 56  = 3B00000000000000
3BF5080AC8BA94B1

С чем именно вы несогласны? что, по-вашему, работает не так?

READ ALSO
Передача данных из java-сервиса в AngularJS (ng-table)

Передача данных из java-сервиса в AngularJS (ng-table)

Здравствуйте! У меня возникла следующая проблемаЕсть вполне рабочее веб-приложение на Java (Spring MVC), где, помимо прочего, делаются запросы в БД, а результаты...

218
Валидация в сафари

Валидация в сафари

Функция валидации полей ввода

317
Как авторизироваться на github c помощью node js?

Как авторизироваться на github c помощью node js?

Делаю скачку обновлений с github из своего репозитория(есть доступ) при помощи nodejs

290