Little Endian против Big EndianLittle Endian - Big Endian Проблема
Big Endian = 0x31014950
Little Endian = 0x50490131
Однако с помощью этого метода
inline unsigned int endian_swap(unsigned int& x)
{
return (((x & 0x000000FF) << 24) |
((x & 0x0000FF00) << 8 ) |
((x & 0x00FF0000) >> 8 ) |
((x & 0xFF000000) >> 24));
}
результат = 0x54110131
я провел много времени, пробуя множество подобных методов и даже библиотеку, такую как
unsigned long _byteswap_ulong(unsigned long value);
Но все же не повезло .. все возвращается тот же результат
EDIT
Я работаю над Little-Endian системы с Microsoft Visual Studio 2008
пример, как не следует за
int main()
{
unsigned int y = 0x31014950;
unsigned int r = endian_swap(y);
std::cout << r;
}
пример, размещенный на Ideone.com, является правильным .. но он не работает со мной
EDIT
std::cout << std::hex << r;
Либо путь Pals .. Hex или нет это не получить номер Направо .. Либо Visual Studio получил серьезные ошибки в это отладчик или всю мою машину ..
Потому что я Заменил весь код с более медленной Redunant кода, но по-прежнему получать те же результаты
BTW, если это делает никакой разницы .. я использую отладчик Сломать после функции, чтобы проверить результат
Вы используете возвращаемое значение, верно? Хотя вы берете 'x' по ссылке, вы никогда не изменяете его. –
'endian_swap' выглядит отлично. И если заменить его на библиотечную функцию «возвращает тот же результат», возможно, ваша проблема находится где-то вне этой функции. – aschepler
@ Джеймс заставлял меня думать, что вы даже не играете на значение 'x', вы делаете все обменивание ссылок. Это то, что вы на самом деле хотите? – BeemerGuy