Различный вывод в Arduino по сравнению с обычным компилятором C - PullRequest
0 голосов
/ 01 июля 2018

В настоящее время я использую Misty Block Cipher в Arduino IDE, и столкнулся со странной проблемой. Имейте в виду, что я далеко не компетентный кодер. Я взял код со страницы github и скомпилировал его на онлайн-компиляторе C, и он отлично работает, но в Arduino вывод получился очень запутанным. Я попытался отладить оба кода и распечатать разные состояния в коде, и я знаю, где это происходит.

    void misty1_encrypt(unsigned int *expkey, unsigned char *ptext,
    unsigned char *ctext)
 {
 unsigned int D0, D1;
 int i, j = 0;

for (i = 0; i < 32; i++) EK[i] = expkey[i];

D0 = D1 = 0;

for (i = 0; i < 4; i++) {
    D0 = D0 << 8;
    D0 |= ptext[j++];
}
printf("D0 atm:");
printf("%02x",D0);
printf("\n");
for (i = 0; i < 4; i++) {
    D1 = D1 << 8;
    D1 |= ptext[j++];
}

printf("D1 atm:");
printf("%02x",D1);
printf("\n");
}

Печать приведенного выше кода в компиляторе C дает

    old plaintext1 : 0123456789abcdef
    D0 atm:1234567     
    D1 atm:89abcdef 

Однако, при печати кода в Arduino, это то, что я получаю

    old plaintext1 : 0123456789abcdef
    D0 atm:4567
    D1 atm:cdef

Я не хочу публиковать весь код, чтобы он не занимал 20 страниц, но стоит упомянуть, что я реализую это на основе реализации RFC2994, и его можно найти здесь: https://tools.ietf.org/html/rfc2994

Из моего незначительного знания кодирования я чувствую, что проблема может возникнуть из-за использования Unsigned Int, но я использовал Uint_32t, и в результате получился тот же результат. Любая помощь будет принята с благодарностью. Я заранее извиняюсь, если публикация не очень удачная, я постараюсь ответить на любые вопросы, которые могут помочь.

...