Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 utl_file в бинарном режиме [Oracle 10g]  [new]
rshuhart
Member

Откуда:
Сообщений: 32
Конструирую dbf-файл. Вот так вставляю заголовок.
utl_file.put_raw(l_outputFile,
                     rpad(l_header.version||
                            to_char(l_header.year,'FM0x')||
                            to_char(l_header.month,'FM0x')||
                            to_char(l_header.day,'FM0x')||
                            to_char(l_header.records_number,'FM0000000x')||
                            to_char(l_header.header_length,'FM000x')||
                            to_char(l_header.record_length,'FM000x'),
                            58, 0)||'00'||'0000');
В заголовке 8 и 9 байты - размер заголовка. Предположим размер 321 - в hex это 0141. Т.е. в 8 байте должно быть 41, а в 9-ом 01. В hex-редакторе смотрю - всё наоборот. Что не так? Зарание спасибо.
25 мар 10, 12:32    [8531131]     Ответить | Цитировать Сообщить модератору
 Re: utl_file в бинарном режиме [Oracle 10g]  [new]
-2-
Member

Откуда:
Сообщений: 15330
rshuhart
Предположим размер 321 - в hex это 0141. Т.е. в 8 байте должно быть 41, а в 9-ом 01. В hex-редакторе смотрю - всё наоборот. Что не так? Зарание спасибо.
Некто с большим концом соревнуется с маленьким. Вы же как истиный араб пишете числа справа налево. Если конвертите многобайтовое число, лучше пользоваться utl_raw.cast_from_binary_inger().
25 мар 10, 12:44    [8531219]     Ответить | Цитировать Сообщить модератору
 Re: utl_file в бинарном режиме [Oracle 10g]  [new]
rshuhart
Member

Откуда:
Сообщений: 32
А пример можно? Чёт не выходит каменный цветок...
25 мар 10, 13:54    [8531798]     Ответить | Цитировать Сообщить модератору
 Re: utl_file в бинарном режиме [Oracle 10g]  [new]
-2-
Member

Откуда:
Сообщений: 15330
rshuhart,

select to_char(321, 'fm00000000x') "Первым байтом будет старший", 
   utl_raw.cast_from_binary_integer(321, 2 /*little_endian*/) "первым байтом будет младший"
from dual
;

Первым байтом будет старший первым байтом будет младший  
--------------------------- -----------------------------
000000141                   41010000                     
25 мар 10, 14:30    [8532173]     Ответить | Цитировать Сообщить модератору
 Re: utl_file в бинарном режиме [Oracle 10g]  [new]
Elic
Member

Откуда:
Сообщений: 29979
Проще для восприятия и удобней для использования reverse:
select              to_char(321, 'fm000x')  "B-E",
    utl_raw.reverse(to_char(321, 'fm000x')) "L-E"
  from dual
;

B-E   L-E
----- ---------
0141  4101
25 мар 10, 14:39    [8532263]     Ответить | Цитировать Сообщить модератору
 Re: utl_file в бинарном режиме [Oracle 10g]  [new]
rshuhart
Member

Откуда:
Сообщений: 32
-2-,

огромное спасибо!!! Я совсем забыл про второй параметр cast_from_binary_integer.... мёртвый мосх....
25 мар 10, 14:40    [8532270]     Ответить | Цитировать Сообщить модератору
 Re: utl_file в бинарном режиме [Oracle 10g]  [new]
rshuhart
Member

Откуда:
Сообщений: 32
Народ всем спасибо!!
Elic, я про utl_raw.reverse вообще не знал. Век живи, век учись :)
Тему можно закрывать.
25 мар 10, 14:42    [8532292]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить