Alignment has to do with data size and addressing. Most instruction sets/software the addressing is in units of bytes. 0,1,2,3 are all valid byte addresses. Assuming your memory system or peripheral you are accessing is "byte addressable" basically you can write individual bytes to it, you normally have instructions that allow you to use any address value. Alignment starts when you have more than one byte, two bytes, if aligned means the lsbit of the address is a zero, unaligned means it is a one. Four bytes, 32 bit quantities, the lower two bits are zero, aligned, one or both not zero, unaligned, and so on. Can think of it as modulo of you want an address where modulo 4 = 0 is aligned on 4 byte boundaries.
Now normally as a software engineer you would not intentionally put yourself in a situation where you needed to get at 10 bytes at address 5 you would probably do 12 bytes at 0x4 or 16 at 0x0 or something along those lines, even if you only use 10 of them you would align them more logically. External influences, network packets, file systems, shared memory, hardware, etc, any time you cross a compile domain, you might have to deal with this and act accordingly. 10 bytes is semi-interesting depends on if you are trying to copy these bytes to another equally bad address or just read them or write them. If reading you probably just want to read 12 bytes at address 0x4 and be done with it. If writing well you can just do all 10 in a nice loop or unrolled a byte at a time, you can write one at 0x5, two at 0x6, four at 0x8, two at 0xC and one at 0xE, or one at 0x5, a loop or unrolled 4 16 bit values starting at 0x6 then one byte at 0xE. Etc.
Since you said reading you could read 3 32 bit quantities at 0x4 or two 64 bit quantities starting at 0x0. It depends heavily on what you plan to do with the data and what instruction set you are using, etc. A loop of 10 byte reads might be the cleanest/simplest easiest to read, maintain, etc.
if you are wondering about aligned vs unaligned then it is as I mentioned above with the writes, you CAN do a
8 bit access at 0x5
16 bit access at 0x6
32 bit access at 0x8
16 bit access at 0xC
8 bit access at 0xE
as I keep saying though for reads that might not be the most efficient. For writes you can read-modify write in 32 or 64 bit quantities or the combinations I mentioned above.