lcd byte array display
Consider the following:
char buffer2[16];  // array of 16 chars
for (uint8_t i = 0; i &lt; 16; i++) {
    do_something_with(buffer2[i]);  // handle one char at a time
}

Here we have an array of 16 cells, each having the char type (which I
assume is what you have). The loop goes through the array, handling one
cell a time. Within the loop, buffer2[i] represents the char being
currently handled.
Keep in mind that a char is just an 8-bit integer. It is somehow
implied that it is meant to represent a character, where 32 = ' '
(space), 33 = '!', 48 = '0', 65 = 'A' and so on (see ASCII).
The Arduino print() methods do assume a char (unlike an int) is
intended to be displayed as a character.
Now your actual loop:
int Item_Name;
for (uint8_t i = 0; i &lt; 16; i++) {
    Serial.write(buffer2[i]);  // write the char on the serial port
    lcd.write(buffer2[i]);     // write the char on the LCD
    Item_Name=buffer2[i];      // store the char in a variable
}

This will print the contents of the buffer to both the serial port and
the LCD. You would have seen the expected message on the LCD if you did
not have lcd.clear() right after the loop.
sscanf(buffer2, &quot;%s&quot;, &amp;Item_Name);

This means “extract from buffer2 a sequence of contiguous
non-white-space characters, and store it in memory at the address of the
variable ItemName”. If the buffer contains “Fresh Milk 1Lt”, this will
write “Fresh” to that memory location. That is 6 bytes (5 letters and a
terminating NUL). Unfortunately, the compiler has only allocated 2 or
4 bytes of RAM for storing ItemName (depending on the Arduino model),
so this will write past the allocated storage, which is a type of bug
known as buffer overflow. Now your Arduino's memory is corrupted and
anything can happen.
sprintf(buffer2, &quot;%d&quot;, &amp;Item_Name);

This tries to find within byffer2 a textual representation of a
number, and store it into Item_Name. This is safe, but only makes
sense if the buffer contains a number, written as text, which is not the
case here.
lcd.print(Item_Name);

This is asking the LCD to print an integer (namely Item_Name). It will
convert the integer to decimal text and print the corresponding digits
on the LCD.
Let's assume for example that Item_Name contains the numeric value
32 (which is the ASCII representation of a space). lcd.print() will
convert that into a sequence of two characters: '3' and '2' (the
decimal representation of 32). It will then send those characters to the
LCD (ASCII values 51 and 50), and you will see the text “32”.
If you want to see the text contained within the buffer, the you can
either send the characters one by one (like you already did right before
lcd.clear()), or provide to lcd.print() a char* pointer with the
whole message:
lcd.print(buffer2);

This assumes that the buffer is terminated with a NUL character. If it
is not, then you can either use the char-at-a-time method, or change
your code in order to put a NUL terminator in the buffer.