В моей программе я сохраняю значение 512 в типе int.
#include <stdio.h>
int main()
{
unsigned int i = 512 ;
char *c = (char*)&i;
printf("c:%u %d\n",c,*c);
printf("c:%u %d\n",c+1,*(c+1));
printf("c:%u %d\n",c+2,*(c+2));
printf("c:%u %d\n",c+3,*(c+3));
}
о / р & GT;
c:3493911684 0
c:3493911685 2
c:3493911686 0
c:3493911687 0
Объяснение: 512 = 1000000000 = & gt; 00000010 0000000 => 02 00.ie 00 00 02 00. также здесь MSB и LSB = 00. В LE-машине LSB должен быть размещен в самой низкой памяти. положить для вышеупомянутой программы должно быть 00,02,00,00 и что я получил в качестве вывода тоже. Но при интерпретации, как это точно делает 512. Он делает какие-либо вычисления в registers.Can любой орган может дать какой-то вклад в это?
2-й вопрос, является ли передача байтов в сети независимой от Выносливость машины или передача тоже принимает тот же порядок, что и при хранении скажем, например, в LE для хранения мы следуем (сначала LSB, затем MSB), так что для Передача также следует за младшим байтом LSB и затем MSB.
источник
Ответы:
Регистры в машине с прямым порядком байтов по определению будут иметь порядок байтов.
Передача указанных байтов по любой среде, безусловно, не зависит от этого. Вы должны соблюдать протокол, который говорит, что при отправке байты должны быть расположены в определенном порядке, а все полученные байты - в определенном порядке API сокетов Unix имеет такие вещи, как
htonl()
например. Если они не приходят в правильном порядке, вы должны перевернуть их, прежде чем работать над ними.источник