LINUX.ORG.RU

union можно использовать

Pi ★★★★★
()

anonymous (*) (09.01.2005 15:39:14):

Еще, обрати внимание:

если ты на little-endian странслируешь char a[2] в short int (как правило, short int как раз в char[2] помещается), спасешь его в виде текста, а потом тем же (обратным) способом странслируешь в char[2] на big-endian, то ты получишь другой порядок байтов.

Die-Hard ★★★★★
()
Ответ на: комментарий от anonymous_incognito

anonymous_incognito (09.01.2005 23:25:52):

> Разве размер char не жёстко задан в 8 бит?

Нет.

Про char известно только одно: sizeof(char)=1

Die-Hard ★★★★★
()

short b;

char* p = (char*)&b; p[1]=a[1]; p[2]=a[2];

Тогда не важно сколько бит char.

olegk ★★
()
Ответ на: комментарий от Die-Hard

> Про char известно только одно: sizeof(char)=1

Я думал машины, на которых байт состоит не из 8 бит, ещё в 1970-х годах исчезли. Или они и сейчас есть?

anonymous_incognito ★★★★★
()

sh = *(short*)a;

хотя на самом деле не понятно что ты хочешь, есть же такое понятие как байт ордер .. и это надо учитывать ..

lg ★★
()
Ответ на: комментарий от anonymous_incognito

anonymous_incognito :

> Я думал машины, на которых байт состоит не из 8 бит, ещё в 1970-х годах исчезли. Или они и сейчас есть

Вообще-то, размер char'а в битах не только от машины зависит, но еще и от транслятора.

Например, на PDP-10 память адресовывалась 36-битными словами. Поэтому был целый зоопарк трансляторов, с байтами по 9, 12, 18 и 36 бит. Причем, иногда наблюдалось sizeof(char*) != sizeof(int*).

Еще был популярный подход с char'ами в 7 бит, но потом в стандартах прописали, что в char'е должно быть ПО КРАЙНЕЙ МЕРЕ 8 бит.

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.