LINUX.ORG.RU

История изменений

Исправление prischeyadro, (текущая версия) :

Да, спасибо, должно быть

x = *(int *)array;

Помню,однажды пришлось так делать потому что сдвиги не помогали — две половинки читались из восьмибитных регистров акселерометра, и представляли они собой куски знакового инта в форме дополнения до нуля. Если просто сдвигать и присваивать их знаковому инту, то -128..127 превращалось в 0..255. А если записать их в массив и кастануть, то работало прекрасно. Да, естественно, это было предназначено конкретно для big endian с шестнадцатибитным интом (это был AVR).

Исходная версия prischeyadro, :

Да, спасибо, должно быть [code=c]x = *(int *)array;[/code]
Помню,однажды пришлось так делать потому что сдвиги не помогали — две половинки читались из восьмибитных регистров акселерометра, и представляли они собой куски знакового инта в форме дополнения до нуля. Если просто сдвигать и присваивать их знаковому инту, то -128..127 превращалось в 0..255. А если записать их в массив и кастануть, то работало прекрасно. Да, естественно, это было предназначено конкретно для big endian с шестнадцатибитным интом (это был AVR).