Два бага сразу:
Лишняя итерация цикла: for(i=0;i<=8;i++){
i или должна быть <8 или <=7
Не использован модификатор длины: sprintf (ch1, "0x%X", temporary[i]);
Исправление: sprintf (ch1, "0x%2X", temporary[i]);
к Армянское Радио +
ch1 объвлен как char ch1[1] - то бишь один байт, а вы в него пытаетесь аж 4 запихнуть, C вам конечно слово не скажет, но потом когда-нибудь можете сильно удивиться.
Не четыре байта, а два - 0xFFFF=65535 =0b1111'1111'1111'1111;
GCC кстати будет ругаться на такое:
warning: overflow in implicit constant conversion [-Woverflow]