Неверный вывод printf - C (СИ)
Формулировка задачи:
Доброго времени суток. Код
где
получается:
byte_to_binary(i) return "0000"
byte_to_binary(sbox1(i)) return "0101"
Почему на экран выводит только "0000 0000" ???
Видимо я чего то не знаю...
printf("%s %s\n",byte_to_binary(i), byte_to_binary(sbox1(i)));const char *byte_to_binary(int)
Решение задачи: «Неверный вывод printf»
textual
Листинг программы
const char *byte_to_binary(int x)
{
int i;
static char b[4];
b[0] = '\0';
for (i = 8; i > 0; i >>= 1)
strcat(b, ((x & i) == i) ? "1" : "0");
return b;
};
int sbox1(int x)
{
int sbox1[2][8]={
// 000 001 010 011 100 101 110 111
{ 5, 2, 5, 3, 1, 6, 7, 1}, //0
{ 7, 4, 4, 2, 3, 5, 6, 3} //1
};
return sbox1[x>>3&0x1][x&0x7];
};
int main()
{
i=0;
printf("%s %s \n",byte_to_binary(i), byte_to_binary(sbox1(i)));
return 0;
}
Объяснение кода листинга программы
- В функции
byte_to_binaryпроисходит преобразование целого числа в двоичное представление и возвращается указатель на строку. - В функции
sbox1происходит использование S-box (подстановочная таблица) для замены части двоичного представления числа на другое число. - В функции
mainсоздается переменнаяiсо значением 0 и выводится двоичное представление числа 0 и результат применения S-box к этому числу. - В данном коде возможно неверное использование функции
printfдля вывода строки и указателя на строку, так как требуется использовать функциюprintfс форматом%sдля вывода указателя на строку.