It is possible that the data in str[100]
is already serialised - without any semantics defined for its content it is not possible to tell. The question to ask yourself is can any arbitrary receiving system interpret that data correctly regardless of its natural byte order, word-size or floating-point encoding?
It is required for two systems to agree about structure of data exchanged between two systems that may have different representation for specific data types and whose compilers may pack structures with different amounts of padding. If you sent a raw struct you cannot be certain that the receiving system will interpret that structure in the same manner due to possible differences in byte-order, structure packing, word-alignment, word-size, and binary encoding of floating point and even signed data.
Structure packing and alignment directives may deal with the possibility of different packing and alignment, but it does not solve the problem of different byte-order or data type sizes (although using specified width data types may help), or differences in floating-point or signed integer representation.
So to solve all these issues the precise arrangement of bytes and encoding of data must be agreed between systems and that arrangement enforced (by serialisation) despite the "natural" arrangement and architecture of either system.
Specifying and enforcing data offset, byte order, word-width and encoding of each data field and enforcing it in code rather than assuming both systems are the same is one form of serialisation. In other cases you might convert all the data to some other encoding such as comma separated ASCII data or XML which is less efficient but far less ambiguous.