В моей программе я сохраняю значение 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));
}

о / р>

c:3493911684 0
c:3493911685 2
c:3493911686 0
c:3493911687 0

Пояснение:512 = 1000000000 => 00000010 0000000 => 02 00.ie 00 00 02 00. поэтому здесь MSB и LSB = 00.В LE машине LSB должен быть размещен в нижней памяти.Следовательно возможный выход для вышеупомянутой программы должен быть 00,02,00,00, и это - то, что я получил как вывод.Но, интерпретируя, как это точно делает 512. делает ли он какие-либо вычисления в регистрах.Может ли какой-либо орган дать какой-то вклад в это?

2-й вопрос: является ли передача байтов в сети независимой от порядкового номера машины или передача тоже занимает тот же порядок, что и при хранении?скажем, например, в LE для хранения мы следуем (сначала LSB, затем MSB), поэтому для передачи он также следует за младшим байтом LSB, а затем MSB.

1 ответ1

0

Регистры в машине с прямым порядком байтов по определению будут иметь порядок байтов.

Передача указанных байтов по любой среде, безусловно, не зависит от этого. Вы должны соблюдать протокол, который говорит, что при отправке байты должны располагаться в определенном порядке, а все полученные байты - в определенном порядке - например, API сокетов unix имеет такие вещи, как htonl() . Если они не приходят в правильном порядке, вы должны перевернуть их, прежде чем работать над ними.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .