Thanks to @Mark Ransom's comment, I realized that the Byte size = 8 setting in C meant that, there are 8 data bits, and one parity bit; on the other hand, on my machine the Number of data bits: 8 explicitly said 7 data + 1 parity bit. As a result, some data bits counted as check bits, and vice versa, with the bytes that don't match the parity getting omitted. This was the reason that some outputs were 5 bytes, some 6 bytes, some 7 bytes, some 8 bytes, and some 9 bytes -- when the actual length should be a bit longer -- 11 in Mark Ransom's example.
So I changed the code to say Byte size = 7, at which point the output started looking a lot more familiar. It turned out that what Mark Ransom said was correct, other than an added 0d 0a on the end. And my output was in fact little-endian -- so the 0a at the beginning of every line in my output corresponded to the 0a at the end of every line in the real output.