от младшего к большому - PullRequest
       21

от младшего к большому

1 голос
/ 22 сентября 2011

см.

я уже написал одну библиотеку (на машине little endian), она отлично работает на машине с прямым порядком байтов, теперь я, когда я работаю на на big endian платформе, она не работает . Ошибка очень сложна для понимания.Теперь я понял концепцию endianess, но все еще не получаю ...

i want to know for making ma library for `big-endian` which changes should i 
take care in ma code? 

Я хочу знать, какая операция имеет различное поведение в обоих порядках байтов

Ответы [ 3 ]

6 голосов
/ 22 сентября 2011

Множество вещей, возможно, придется изменить (сложно дать исчерпывающий список: «вот что может пойти не так»).

Как правило, возникают проблемы с порядком байтов, когда кто-то пытается получить прямой доступ к содержимомупамять целого числа (например, с memcpy, например, union трюки и т. д.).

1 голос
/ 22 сентября 2011

Чтобы указать проблему, о которой упоминает cnicutar, типичным кандидатом на проблемы является случай, когда вы напрямую обращаетесь к частям типа с помощью массива другого типа вместо использования вычислений для доступа.

unsigned long int  a = 0x04030201ul;

/* Directly accesses the representation, gives 2 on LE and 3 on BE */
b = ((unsigned char *)&a)[1];

/* Works with the values, always gives 2 */
b = (a >> 8) & 0xff;
0 голосов
/ 22 сентября 2011

Использует ли ваша библиотека файлы двоичных данных?

При использовании двоичных файлов вы должны позаботиться о том, в каком формате (большой или младший) вы записываете / читаете свои данные.Например, при записи массива целых чисел в файл они будут храниться в порядке байтов машины, которая выполняет запись.При чтении необходимо учитывать это обстоятельство и при необходимости конвертировать данные.

...