Вот вывод, выгруженный из od -cx (на linux вы можете воспроизвести с echo -ne "\r\n\n" |od -cx):
od -cx
echo -ne "\r\n\n" |od -cx
0000000 \r \n \n \0 0a0d 000a 0000003
Правильные первые 2 байта должны быть 0d0a, но выводит 0a0d, почему
0d0a
0a0d
потому что вы в системе с прямым порядком байтов? 16-разрядное целое число будет старшим байтом, за которым следует младший; в этом случае второй байт, за которым следует первый.
Потому что он читает это как шорты, а не как байты.Короткое обращение - 2 байта в обратном порядке.
Поскольку ваш компьютер использует так называемый метод "little-endian" для представления слов в памяти (архитектура процессора x86 является типичным примером систем с прямым порядком байтов).