Каковы эти числа, которые преобразовывают в текст? - PullRequest
1 голос
/ 26 апреля 2020
/***
 * Author: Omar IRAQI
*/

#include <stdio.h>
#include <stdlib.h>
#define N 11

int main(void) {
    int i, *p, encoded_message[] = {1634558290, 544104804, 1701994827, 539782501, 1918985572, 
                                1970565920, 1953391972, 1226845811, 1936289056, 1870209139, 8565};
    char *message;

    printf("%s\n", (char*)encoded_message);

    /**
     * Let's say it again!
     */
    message = (char*)malloc(N * sizeof(int));
    p = (int*)message;

    for (i=0; i < N; i++, p++)
        *p = encoded_message[i];

    printf("%s\n", message);
    return 0;
}

это выводит сообщение дважды: Рамадан Карим, дорогие студенты. Я скучаю по тебе!

Мне было интересно, что это за кодированные числа, поскольку они не совпадают с кодом ASCII

1 Ответ

1 голос
/ 26 апреля 2020

Каждое int должно быть разделено на 4 байта для восстановления отдельных кодов ascii. Вы можете просто напечатать каждое целое число в шестнадцатеричном виде.

Вы также можете вычислить:

1634558290 % 256
(1634558290 >> 8) % 256
(1634558290 >> 16) % 256

и т. Д.

У вас есть 11 х 4 байтовых целых числа для общего количества 44 байта. Это близко соответствует длине сообщения.

1 634 558 290 = 0x616D6152
52 : R
61 : a
6D : m
61 : a

Поиск младшего и младшего порядковых номеров для определения причины инвертирования байтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...