сообщество, у меня мало опыта работы с Си, и я сейчас нахожусь на кривой обучения.
Я работаю над небольшим проектом, который предполагает разделение 32-символьной строки на 4 строки по 8 символов в каждой.C. 32-символьная строка должна напоминать 32-битную инструкцию.Эти «32 бита» разделены на 4 «8-битные» строки, которые я хочу распечатать как Hex.Код ниже - это то, что я получил до сих пор.Я использую типы данных, которые я использую в остальной части моего кода.Я намереваюсь передать переменную unsigned char t
в программу Substitution Box, которая даст мне эквивалент этого t
символа из таблицы поиска S-Box.
Мне кажется, что приведенный ниже код должен работать
unsigned char inst[] = "10101010101010101111111100111101";
unsigned char in[8];
for (int i = 0; i < 33; i++){
if (i%8 == 0 && i != 0) {
unsigned char t = (unsigned char) strtol(in, NULL, 2);
printf("%x \n", t);
}
in[i%8] = inst[i];
printf("%c ", in[i%8]);
}
но вывод выглядит так:
1 0 1 0 1 0 1 0 3d
1 0 1 0 1 0 1 0 3d
1 1 1 1 1 1 1 1 3d
0 0 1 1 1 1 0 1 3d
Я вижу, что строка in[i%8] = inst[i];
правильно читает chars
из inst[]
, но
if (i%8 == 0 && i != 0) {
unsigned char t = (unsigned char) strtol(in, NULL, 2);
printf("%x \n", t);
}
Условный оператор печатает неправильный гекс.Вывод должен выглядеть примерно так:
1 0 1 0 1 0 1 0 aa
1 0 1 0 1 0 1 0 aa
1 1 1 1 1 1 1 1 ff
0 0 1 1 1 1 0 1 3d
Любая помощь приветствуется.