Если бы Вы на самом деле ищете Построение диаграммы библиотек, а не для библиотек Node/Edge Graph я предложил бы разориться на библиотеку Big Faceless Graph ( BFG). Это - путь, легче использовать, чем JFreeChart, более хорошие взгляды, выполнения быстрее, больше произвел опции, действительно никакое сравнение.
Потому что процессор, на котором вы работаете, little-endian . Меняется порядок байтов для многобайтового основного типа. На машине с прямым порядком байтов все будет так, как вы ожидаете.
Это потому, что вы запускаете программу на little endian процессоре. См. Также порядок байтов здесь и там .
Порядок байтов, очевидно, является ответом, как указал Гоз.
Но для тех, кто не понимает, что это означает, также важно понимать, что порядок байтов, отображаемых в пример такой же, как порядок в исходном int. Memcpy не меняет порядок байтов независимо от типа платформы.
Порядок байтов возникает, когда мы обращаемся к меньшим единицам, например байтам. Это, по сути, произвольное решение, которое должен принять разработчик ЦП: прямой или прямой порядок байтов.
Полезно упростить ситуацию и понять, что в основном это соединение с периферийными устройствами, которое упорядочивается по байтам. Да, это можно обнаружить с помощью байтовой адресации, как вы доказали, но в целом скалярные значения загружаются и сохраняются как единицы в регистры, и в этом случае порядок байтов ничего не меняет. Старшие биты находятся «слева», по крайней мере, как мы обычно пишем числа. Вот почему <<
и >>
операторы всегда дают одни и те же результаты на машинах с прямым порядком байтов и обратным порядком байтов при использовании в соответствии со стандартами языка.
Но для чтения и записи потоков данных на периферийные устройства вы вынуждены выбирать байты приказ. Это связано с тем, что периферийные устройства в основном являются устройствами с потоком байтов. Имеет ли самый младший адрес старшие или самые младшие биты? Это делается в обоих направлениях, и лагеря раньше были довольно равномерно разделены.
Поскольку сама память адресуется побайтово, безусловно, можно получить другое поведение без периферийных устройств, но обычно этого не происходит без намеренного заглядывания внутрь, как это делали вы .
Представьте себе ЦП, у которого нет байтов, только 32-битные слова с адресами 0, 1, 2. Компилятор C создает для всех 32-битных объектов char, int и long. (Это разрешено Сх9.) Вау, нет проблем с порядком байтов! И то, и другое! Но ... что происходит, когда мы подключаем наше первое периферийное устройство ??
1. Ну, у x86 есть регистры, которые являются псевдонимами меньших регистров, но это уже другая история.
На разных машинах может быть разный порядок байтов, но взгляните на этот код и подумайте, что происходит в зависимости от того, как расположены байты:
long x = 89;
short *p = (short*)&x;
short y = *p;
Если вы хотите, чтобы ваше приложение было переносимым или разрабатывалось в рамках команды, вы, вероятно, не захотите следовать этой логике, поскольку это затруднит выявление ошибок и продлит разработку.