Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.02.2015, 10:25
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
Вопрос Прямой порядок чтения из MemoryStream

Вот такая задача:
Имеем MemoryStream, в котором записано
Код:
00 00 00 0A
Это число 10 как можно понять. Пытаюсь это число прочитать:
Код:
var
A:TMemoryStream;
C:Integer;
Begin
// ... загружаем эти байты из файла не суть
A.Seek(0, soFromBeginning);
A.Read(C,4);
A.Free;
end;
И после чтения я получаю результат 167772160, т.е. 0A 00 00 00... все логично прочитало как число в обратном порядке. Но как его прочитать в прямом порядке? Предполагаю что ничего сложного, но использовать циклы и читать по 1 байту как-то не комильфо.
Подскажите кто знает.
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #2  
Старый 11.02.2015, 11:27
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Данные так перевёрнутыми и хранятся везде - вроде в проц так их вгонять проще

Можно сделать так:
Код:
...

function bth(ds: byte): string;
const
 b: string = '0123456789ABCDEF';
begin
 Result:= b[(ds shr 4) + 1] + b[(ds and $F) + 1];
end;
...

var
 b1, b2, b3, b4: byte;
...

AssignFile(

Reset(

Read(SomeFile, b1, b2, b3, b4);
C:= StrToInt('$' + bth(b4) + bth(b3) + bth(b2) + bth(b1));
Правда это работает с типизированным байтовым файлом, в смысле с file of byte, но вроде должно и с потоком прокатить, к сожалению, такое не проверял
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
SCrat.ORS (12.02.2015)
  #3  
Старый 11.02.2015, 11:35
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Ох как же мог забыть про это:
Код:
C:= StrToInt('$' + bth(b4) + bth(b3) + bth(b2) + bth(b1));
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #4  
Старый 11.02.2015, 12:20
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Big Endian, Little Endian.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 15.02.2015, 04:47
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Big Endian, Little Endian.
Только сейчас дошло
Код:
c:= swap(c shr 16) or (swap(c) shl 16);
Ответить с цитированием
  #6  
Старый 15.02.2015, 13:57
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

А еще есть
Код:
asm
   bswap eax
end;
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:55.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter