В чем разница между старшими и младшими байтовыми числами? - PullRequest
7 голосов
/ 30 января 2012

Для целочисленных значений это довольно прямая разница в представлении с прямым и обратным порядком байтов.

Но мне не ясно, как порядковый номер с маленьким порядком байтов отличается от значения с большим порядковым номером.

И, наконец, я хотел бы знать, какой из них чаще используется.

Ответы [ 2 ]

13 голосов
/ 30 января 2012

Endianness - это просто свойство байтов, составляющих значение, состоящее из нескольких байтов. Поскольку число с плавающей запятой занимает 4 или 8 байтов, байты указывают, в каком порядке их читать. Это точно так же, как с целочисленными значениями.

6 голосов
/ 30 января 2012

В некоторых источниках говорится, что числа с плавающей запятой IEEE754 всегда хранятся с прямым порядком байтов, но спецификация IEEE754 для чисел с плавающей запятой просто не охватывает проблему порядка байтов и может варьироваться от машины к машине.Вот пример кода для преобразования массива с плавающей запятой / байтов:

#include <stdio.h>

int main(int argc, char** argv){
  char *a;
  float f = 3.14159;  // number to start with

  a = (char *)&f;   // point a to f's location

  // print float & byte array as hex
  printf("float: %f\n", f);
  printf("byte array: %hhX:%hhX:%hhX:%hhX\n", \
    a[0], a[1], a[2], a[3]);

  // toggle the sign of f -- using the byte array
  a[3] = ((unsigned int)a[3]) ^ 128;

  //print the numbers again
  printf("float: %f\n", f);
  printf("byte array: %hhX:%hhX:%hhX:%hhX\n", \
    a[0], a[1], a[2], a[3]);

  return 0;
}

Он выводится на маленькой индийской машине:

float: 3.141590 байтов: D0: F: 49: 40 float: -3.141590 байтовый массив: D0: F: 49: C0

Теоретически на машине с прямым порядком байтов порядок байтов будет обратным.

Ссылка: http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/

...