Моя основанная на AMD машина использует или обратный порядок байтов с прямым порядком байтов?

Я согласен с lhunath препятствовать использованию which, и его решение совершенно справедливо для пользователей BASH . Однако, чтобы быть более переносимым, вместо него следует использовать command -v:

$ command -v foo >/dev/null 2>&1 || { echo "I require foo but it's not installed.  Aborting." >&2; exit 1; }

Команда command совместима с POSIX, ее спецификация приведена здесь: http://pubs.opengroup.org /onlinepubs/9699919799/utilities/command.html

Примечание: type соответствует POSIX, но type -P - нет.

30
задан Pokechu22 18 November 2014 в 00:33
поделиться

6 ответов

Все машины x86 и x86-64 (которые являются просто расширением x86) имеют прямой порядок байтов.

Вы можете подтвердить это примерно так:

#include <stdio.h>
int main() {
    int a = 0x12345678;
    unsigned char *c = (unsigned char*)(&a);
    if (*c == 0x78) {
       printf("little-endian\n");
    } else {
       printf("big-endian\n");
    }
    return 0;
}
67
ответ дан 27 November 2019 в 23:05
поделиться

Простой способ узнать порядок байтов указан в статье Написание кода, не зависящего от порядка байтов на C

const int i = 1;
#define is_bigendian() ( (*(char*)&i) == 0 )
13
ответ дан 27 November 2019 в 23:05
поделиться

Отвечая на ваш последний вопрос, ответ отрицательный. Linux может работать на машинах с прямым порядком байтов, таких как, например, PowerMac старого поколения.

3
ответ дан 27 November 2019 в 23:05
поделиться

Вам необходимо загрузить версию Ubuntu, разработанную для машин с прямым порядком байтов. Мне известны только версии PowerPC . Я уверен, что вы найдете место, где есть более общая реализация с прямым порядком байтов.

2
ответ дан 27 November 2019 в 23:05
поделиться

"Intel-совместимый" не очень точен.

Intel использовала процессоры с обратным порядком байтов, особенно StrongARM и XScale. В них не используется IA32 ISA, широко известный как x86.

Еще дальше в истории Intel также сделала i860 и i960 с прямым порядком байтов, которые также не являются x86-совместимыми.

Еще дальше в истории - предшественники. x86 (8080, 8008 и т. д.) также не совместимы с x86. Для 8-битных процессоров порядок байтов на самом деле не имеет значения ...

В настоящее время Intel по-прежнему выпускает Itanium (IA64) с обратным порядком байтов: нормальная работа идет с прямым порядком байтов, но процессор также может работать с малым -индийский режим. Так получилось, что код x86 можно запускать в режиме прямого порядка байтов, но родной ISA не является IA32.

Насколько мне известно, все AMD ' s были x86-совместимы с некоторыми расширениями, такими как x86_64, и поэтому обязательно имеют прямой порядок байтов.

Ubuntu доступен для x86 (прямой порядок байтов) и x86_64 (прямой порядок байтов), с менее полными портами для ia64 ( прямой порядок байтов), ARM (el) (прямой порядок байтов), PA-RISC (прямой порядок байтов, хотя процессор поддерживает оба), PowerPC (обратный порядок байтов) и SPARC (прямой порядок байтов). Я не верю, что существует порт ARM (eb) (big-endian).

6
ответ дан 27 November 2019 в 23:05
поделиться

Assuming you have Python installed, you can run this one-liner, which will print "little" on little-endian machines and "big" on big-endian ones:

python -c "import struct; print 'little' if ord(struct.pack('L', 1)[0]) else 'big'"
11
ответ дан 27 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: