Интерпретация байтов, хранящихся в памяти машины Little Endian?


0

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


1) Я не понимаю, почему вы заботитесь об этом - вообще, 2) это сильно варьировалось бы в зависимости от огромного количества факторов, таких как процессор, архитектура сервера, используемые интерфейсы, ОС и т. Д., 3) было бы мало или не влияет на производительность в любом случае и 4) Я все еще не знаю, что вы будете заботиться?
Chopper3

@ Chopper3 & gt; Я думал, что если, скажем, байты получены в порядке 00 02 00 00, то в машине LE он сохраняется как 00 00 02 00, а если он получен как 00 00 02 00, в машине LE он сохраняется как 00 02 00 00. То, как байты будут храниться в машине, зависит от того, в каком порядке они были получены. Это мое понимание. Я чувствую, что это неправильно после просмотра вашего сообщения. Исправьте меня, пожалуйста.

@EEAA & gt; Это не отдельная тема. Каждая часть сомнения - это новый шаг к обучению. Что я спрашивал, так это когда данные сохранены, как они правильно интерпретируются при чтении с машины LE, потому что в LE MSB хранится в самая высокая память? Так как это происходит.

1
Проблема здесь в том, что это не имеет ничего общего с профессиональным системным администрированием и, следовательно, не подходит для Ошибка сервера , Вы можете спросить общий компьютер вопросы на нашем родственном сайте Супер пользователь , а также программирование вопросы по Переполнение стека ,
Michael Hampton

@ Chopper3 & gt; Таким образом, для получения данных они должны располагаться в определенном порядке, верно. Я говорил об этом порядке. Это имеет смысл, верно?

Ответы:


0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.