Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Порядок байтов

311
07 октября 2009 года
plastictown
309 / / 08.01.2006
Столкнулся с такой проблемой: в shp файле данные имеют разный порядок байтов:
Цитата:

Порядок байтов в integers и double-precision integers, составляющих описание данных в заголовке файла (определенном выше) и в содержимом строк в главном файле, - малый (PC или Intel). Порядок байтов в integers и double-precision integers, из которых состоит остаток файла, - большой (Sun или Motorola).

большой порядок байтов Порядок байтов слева направо в целых словах. Этот порядок используется во многих UNIX-системах, таких как Hewlett-Packard® , IBM® , SUN.

малый порядок байтов Порядок байтов справа налево в целых словах. Этот порядок используется многими операционными системами, включая DEC OSF/1™ , DEC Open VMS™ , MS-DOS® и Windows NT™ .



Каким образом получить число в привычном (малопорядочном:-) виде, имея число с большим порядком байтов?

Заранее спасибо!

288
07 октября 2009 года
nikitozz
1.2K / / 09.03.2007
Цитата: plastictown

Каким образом получить число в привычном (малопорядочном:-) виде, имея число с большим порядком байтов?



Как вариант использовать ntohl и функции из этого семейтсва.

311
07 октября 2009 года
plastictown
309 / / 08.01.2006
Цитата: nikitozz
Как вариант использовать ntohl и функции из этого семейтсва.



Я посмотрел, они, вроде бы, принимают( и возвращают) unsigned аргумент. Мне надо signed.

14
08 октября 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: plastictown
Я посмотрел, они, вроде бы, принимают( и возвращают) unsigned аргумент. Мне надо signed.


покатит и для знаковых.
для 32х битных я, например, пользую ассемблерую bswap. для 16-ти - xchg

311
08 октября 2009 года
plastictown
309 / / 08.01.2006
Для int ntohl() работает клево. А как быть с double?
14
08 октября 2009 года
Phodopus
3.3K / / 19.06.2008
Ну проинтерпретируйте как массив байт. Хотя может и для 8-байтных что-то есть - не вспомнить.
590
08 октября 2009 года
Gigahard
223 / / 03.04.2006
Если это именно обратный порядок байтов, то вообще пофиг какой тип конвертируется. Для компа это тупо область памяти заполненая нулями и единичками. Критична только ширина типа, т.к. разворачивается в обратном порядке не весь файл, а его компоненты, которые меняют свой внутренний порядок байтов, но при этом не меняют порядок следования в файле.
311
09 октября 2009 года
plastictown
309 / / 08.01.2006
Всем спасибо! Буду пробовать.
3.4K
10 октября 2009 года
_Undead_
43 / / 05.10.2004
Код:
trDWord ReadFile( trLpFile pFile ) {
        trDWord dwResult = 0, dwCur = 0;
        int iChar = 0, i = 0;
        while ( !feof( pFile ) ) {
            for( i = 0; i < 4; ++i ) {
                iChar = fgetc( pFile );
                if ( iChar != EOF ) {
                    if ( i ) {
                        dwCur <<= 8; // байты идут от старшего к младшему, значит и заполняем так же
                    }
                    dwCur |= iChar;
                } else {
                    break;
                }
            }
            if ( i == 4 ) {
                m_szText += dwCur;
                ++dwResult;
                dwCur = 0;
            }
        }

        return dwResult;
    } // trDWord ReadFile

Функция вернет количество считанных символов.
m_szText - полученный текст, содержащий символы как 4-х байтные коды (DWORD)
trDWord: typedef unsigned long trDWord;
Это только пример.
311
10 октября 2009 года
plastictown
309 / / 08.01.2006
_Undead_: сейчас попробовать не могу, но, все равно, спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог