Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, 0K, Вы писали:
0K>>BitConverter я заменил. А вот Buffer.BlockCopy не знаю заменять или нет?
H>BlockCopy банально копирует участок памяти (массив). Каким был один участок — таким будет другой.
Копирует-то она копирует, да только вот можно не то или не туда скопировать. Думали, что копировали младший байт куда-то, а оказалось — старший.
Физического процессора, который бы использовал big-endian нет, а нужно протестировать приложение на корректность работы с big-endian. Что делать? Есть ли какой-нибудь эмулятор?
Re: Как протестировать .Net программу с big-endian?
Здравствуйте, 0K, Вы писали:
0K>Физического процессора, который бы использовал big-endian нет, а нужно протестировать приложение на корректность работы с big-endian. Что делать? Есть ли какой-нибудь эмулятор?
Зачем, проверить работу этого процессора?
Уже вроде отмечалось, что на самой машины порядок байт значения не имеет.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Как протестировать .Net программу с big-endian?
Здравствуйте, hardcase, Вы писали:
H>Зачем, проверить работу этого процессора? H>Уже вроде отмечалось, что на самой машины порядок байт значения не имеет.
Есть стандарт, в котором должны быть представлены данные. И программа пока работает по этому стандарту (в т.ч. сохраняет значения в файл). Что будет если запустить на другом процессоре -- не знаю.
BitConverter я заменил. А вот Buffer.BlockCopy не знаю заменять или нет? Вроде нужно заменять, т.к. скажем, после копирования массива Int32 в массив Byte вместо 1234 5678 получим 4321 8765? А может и нет. Нужно проверить в общем.
Re[3]: Как протестировать .Net программу с big-endian?
Здравствуйте, 0K, Вы писали:
0K>BitConverter я заменил. А вот Buffer.BlockCopy не знаю заменять или нет? Вроде нужно заменять, т.к. скажем, после копирования массива Int32 в массив Byte вместо 1234 5678 получим 4321 8765? А может и нет. Нужно проверить в общем.
Порядок байт в памяти начинает иметь значение лишь когда происходит доступ к памяти с нарушением типизации (аналогично reinterpret_cast<> из C++).
Очевидно что копирование int[] в byte[] — это нарушение типизации и потому нужно принимать во внимание порядок байт.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: Как протестировать .Net программу с big-endian?
Здравствуйте, hardcase, Вы писали:
H>Порядок байт в памяти начинает иметь значение лишь когда происходит доступ к памяти с нарушением типизации (аналогично reinterpret_cast<> из C++). H>Очевидно что копирование int[] в byte[] — это нарушение типизации и потому нужно принимать во внимание порядок байт.
Ну все равно для уверенности нужно проверить. Неужели нет никакого способа?
Re: Как протестировать .Net программу с big-endian?
Здравствуйте, 0K, Вы писали:
0K>Физического процессора, который бы использовал big-endian нет, а нужно протестировать приложение на корректность работы с big-endian. Что делать? Есть ли какой-нибудь эмулятор?
Уффф... Ну разве что эмулятор PDA/смартфона какого-нибудь с ARM под линухами. Можно посмотреть, скажем, те, что с Андроидом идут. И ставить туда придется Mono. Хотя, кстати, может, .NET Micro тоже умеет.
Ну или эмулятор Xbox (наверняка в Xbox SDK включен) — вроде, есть и для него какой-то шибко урезанный фреймворк.
Больше ничего более-менее доступного в голову не приходит