Want read data from EEPROM as HEX, not DEC

I'm back, because I'm beginner here in forum, I was banned for 24hrs.
OK, thank you for your ideas. I did little cleared my testing sketch.
Now I testing the code on ATm328P, finaly will using on ATm32A. Because both avr have 2kB SRAM, and I would use also OLED 1306, I need 1250B of SRAM, rested 750B not enough for saving "shortcuts" into bidimensional array. Also saving this shortcut table into progmem, is on edge of FLASH size limit. Last free space, is 1kB of EEPROM. Alternative library for SSD1306 aren't satisfy my request for scrolling and font size, quality. So this is main, why I want to move some data to internal EEPROM. This data I did saved in external text editor, validated and crc by avrdude, even if is not used zeros, like standard char. When you mean, that problem is here, then I have not chance to put inside eeprom, I need 38x5x6=1.140Byte, then will oversized. If you try run my sketch, you will se its read nice. Because on eeprom address is possible saved data by Byte, and I have about 190 (38columns*5words) combinations, my choice was HEX code. In whole code, I use only three messages to serial console, each by using F-macro.

//  eeprom content, not full but like example...
// :20000000  F7 B9 EF CB CE BE C9 DE CE CE BEC9D9A8CEF7A6BAE9CEB8F8B7FDCEC8EEE8DACFB8EC A6

#include <EEPROM.h>   // in the progmem I have saved words, from which I will combined sentences later...
const char F7[] PROGMEM = "CONNECTED";    // the word CONNECTED I will call from eeprom address 00...
const char B9[] PROGMEM = "DISABLED";    // so it is list of shortcuts for calling words to display
const char EF[] PROGMEM = "MANUAL";
const char CB[] PROGMEM = "REJECT";
const char CE[] PROGMEM = "RETURN";
const char BE[] PROGMEM = "SIGNAL";
const char C9[] PROGMEM = "WAITING";
const char DE[] PROGMEM = "CONNECTED";

void setup() {
  Serial.begin(115200);
  delay(1000);
}
size_t count = 0;
size_t countB = 0;
size_t countA = 0;
char result[10];
char resultB[10];
char resultA[10];

void tisk(int adr) {    // loop for rotate first 10 addresses for testing sketch...
  char content[2];
  sprintf(content, "%X", (EEPROM.read(adr)));   // here did read correct content saved in eeprom...

  //char* buff = EEPROM.read(adr);     // here I wanted help, because read nonsenses...
  char buff = EEPROM.read(adr);     // here I wanted help, because read nonsenses...

  count = strlcpy_P(result, content, sizeof(result));   // here reading nonsense...
  countB = strlcpy_P(resultB, buff, sizeof(resultB));   // here reading nonsense...
  countA = strlcpy_P(resultA, F7, sizeof(resultA));     // if I put direct eeprom content = F7, reading is correct...

  Serial.println(F(" _ _ _ _ _ _ _ _ _ _ _ _ _ "));
  Serial.println(F(" "));
  Serial.print(F(" on address = ")); Serial.print(adr); Serial.print(F("\t is real content = ")); Serial.println(content);
  Serial.println(F(" "));
  Serial.print(F(" buff = ")); Serial.println(buff);
  Serial.println(F(" "));
  Serial.print(F(" count = ")); Serial.print(count); Serial.print(F("\t result = ")); Serial.println(result);
  Serial.print(F(" countB = ")); Serial.print(countB); Serial.print(F("\t resultB = ")); Serial.println(resultB);
  Serial.print(F(" countA = ")); Serial.print(countA); Serial.print(F("\t resultA = ")); Serial.println(resultA);
  Serial.println(F(" "));
}

void loop() {       // changing eeprom address, 00 to 09 //
  for (int z = 0; z < 10; z++) {
    tisk(z); delay(500);
  }
  delay(500);
}

And here is part of result, what I get:

00:59:49.987 ->  _ _ _ _ _ _ _ _ _ _ _ _ _ 
00:59:49.987 ->  
00:59:49.987 ->  on address = 0	 is real content = F7
00:59:49.987 ->  
00:59:49.987 ->  buff = ⸮
00:59:49.987 ->  
00:59:49.987 ->  count = 60	 result = ⸮
00:59:49.987 -> ⸮⸮⸮
00:59:49.987 ->  countB = 12	 resultB = ⸮⸮⸮⸮⸮⸮⸮
00:59:50.034 ->  countA = 9	 resultA = CONNECTED
00:59:50.034 ->  
00:59:50.520 ->  _ _ _ _ _ _ _ _ _ _ _ _ _ 
00:59:50.520 ->  
00:59:50.520 ->  on address = 1	 is real content = B9
00:59:50.520 ->  
00:59:50.520 ->  buff = ⸮
00:59:50.520 ->  
00:59:50.520 ->  count = 60	 result = ⸮
00:59:50.520 -> ⸮⸮⸮
00:59:50.520 ->  countB = 2	 resultB = ⸮⸮
00:59:50.520 ->  countA = 9	 resultA = CONNECTED
00:59:50.520 ->  
00:59:51.037 ->  _ _ _ _ _ _ _ _ _ _ _ _ _ 
00:59:51.037 ->  
00:59:51.037 ->  on address = 2	 is real content = EF
00:59:51.037 ->  
00:59:51.037 ->  buff = ⸮
00:59:51.037 ->  
00:59:51.037 ->  count = 60	 result = ⸮
00:59:51.037 -> ⸮⸮⸮
00:59:51.037 ->  countB = 20	 resultB = '⸮'	⸮⸮⸮⸮⸮
00:59:51.037 ->  countA = 9	 resultA = CONNECTED
00:59:51.037 ->  
00:59:51.539 ->  _ _ _ _ _ _ _ _ _ _ _ _ _ 

As you see, if I format sprintf as HEX, I see correct output from eeprom.
Also, if I put directly my variable, like F7 (or anything as defined in progmem), into strlcpy_P function, then I also get correct result as wanted.
But I need help, how to combine both it, can be working together. Idid try something with char and pointer, but without success. I'll be very happy if you can help me find a solution, I'm stuck here this step and I'm worried about it for about the third day, I need to kick me.
Thank you again. :slight_smile:
eeprom.h (2.4 KB)
accreq05.ino (2.3 KB)