Вверх ↑
Этот топик читают: Гость
Ответов: 1926
Рейтинг: 172
#1: 2017-06-28 00:27:38 ЛС | профиль | цитата
Насколько я понял, он всегда little-endian. А тут понадобилось читать в big... Хотелось бы добавить в компонент эту возможность. Но это надо Share.pas переделывать, так что пока просто записал в эту тему, чтобы не забывать. Может, кто-то вечерком займётся А может, сам когда доберусь.

(Для чего нужно - потребовалось прочитать размеры атомов mp4-файла, а там как раз слева направо записано.)
(Знаю, есть какой-то компонент для чтения/записи структур с такой возможностью, но он нештатный.)

--- Добавлено в 2017-06-28 00:30:24

Походу менять надо даже не share, а KOL.


st.read(c,4);

Тут уже в интеловском порядке пишется.

Редактировалось 1 раз(а), последний 2017-06-28 00:30:24
карма: 9
0
Ответов: 8926
Рейтинг: 823
#2: 2017-06-28 00:48:42 ЛС | профиль | цитата
3042, 2008 г., от Galkovhttp://forum.hiasm.com/getfile/38142
Внимательно прочитайте примечания к точкам.
карма: 19

1
Голосовали:3042
Разработчик
Ответов: 4698
Рейтинг: 426
#3: 2017-06-28 03:03:58 ЛС | профиль | цитата
Компонент чтения структур, если что, здесь
карма: 10
1
Голосовали:3042
Ответов: 5227
Рейтинг: 587
#4: 2017-06-28 16:49:18 ЛС | профиль | цитата
Всегда считал что от программиста зависит что, где и когда он хочет считать, хоть байты хоть биты. Править КОЛ ради этого ну не бред? Вот то что в HiAsm так мозг шалит это уже настораживает как минимум.

з.ы чтение RGB, ARGB, RGBA вроде тоже как люди писали
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 1926
Рейтинг: 172
#5: 2017-06-28 20:15:49 ЛС | профиль | цитата
Плохо, что нужны внештатные компоненты - они могут быть не у всех. Пока решил проблему так:
Add(DataToFile,3017491,273,203)
{
link(onGet,11295027:doConvert,[])
}
Add(For,11843173,210,210)
{
End=3
link(onEvent,3017491:doGet,[])
link(onStop,13365424:doData,[(262,223)(262,272)])
}
Add(Convertor,11295027,322,203)
{
Mode=6
link(onResult,12471661:doStrCat,[])
}
Add(Convertor,4358743,427,266)
{
Mode=5
}
Add(StrCat,12471661,378,203)
{
Point(doClear)
link(Str1,10646456:Var1,[(384,191)(372,191)(372,250)])
}
Add(DoData,13365424,378,266)
{
link(onEventData,4358743:doConvert,[])
link(Data,10646456:Var2,[])
}
Add(GetDataEx,10646456,378,245)
{
link(Data,12471661:Result,[])
}

КОЛ менять, конечно же, не придётся, всё можно сделать в компоненте. У Галкова как раз для bigEndian функция реверса прописана.

--- Добавлено в 2017-06-28 20:19:11

Картинка случайно прилипла.

Редактировалось 2 раз(а), последний 2017-06-28 20:19:11
карма: 9
0
файлы: 1Project003.gif [96.4KB] [619]
Ответов: 4630
Рейтинг: 749
#6: 2017-06-29 11:32:28 ЛС | профиль | цитата
Если речь идёт о 32-битном Integer, то тут код для "переворачивания": /post/283787
карма: 26

1
Голосовали:3042
Ответов: 5227
Рейтинг: 587
#7: 2017-06-29 16:17:38 ЛС | профиль | цитата
Netspirit, bswap это хорошо, но в некоторых случаях требуется произвольный порядок смены байтов. Для таких случаев хорошо зарекомендовала функция с директивой "absolute"
код примерно такой:


procedure THiAsmClass.doMixing(var dt: TData; idx: word);
var
inDt,outDt: integer;
arrByteIn: array[0..3] of Byte absolute inDt;
arrByteOut: array[0..3] of Byte absolute outDt;
begin
inDt := ToInteger(dt);
arrByteOut[0] := arrByteIn[3];
arrByteOut[1] := arrByteIn[2];
arrByteOut[2] := arrByteIn[1];
arrByteOut[3] := arrByteIn[0];
_hi_onEvent(onRes,outDt);
end;

хотя ещё несколько вариантов можно напридумывать
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 4630
Рейтинг: 749
#8: 2017-06-29 16:40:18 ЛС | профиль | цитата
Ну, спрашивалось про big-endian.
карма: 26

0
Ответов: 5227
Рейтинг: 587
#9: 2017-06-29 16:49:35 ЛС | профиль | цитата
Не буду спорить, просто огорчает тот факт что человек у которого я IC учился писать на его блоге такие фортеля выкидывает. Как то так...
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 4630
Рейтинг: 749
#10: 2017-06-29 16:52:47 ЛС | профиль | цитата
Можно ещё и так делать (на нашей "рассыпухе"):
function BSwap(const x: LongWord): LongWord; inline;
begin
Result := (x shr 24) or
((x shr 8) and $0000ff00) or
((x shl 8) and $00ff0000) or
(x shl 24);
end;

Редактировалось 1 раз(а), последний 2017-06-29 16:53:02
карма: 26

0
Ответов: 5227
Рейтинг: 587
#11: 2017-06-29 20:26:58 ЛС | профиль | цитата
Вот неоднократно поднимается тема о гибкости программирования в HiAsm (то Galkov про низкоуровневые кирпичи, то nesco что swap для локальных переменных и массивов как нефиг делать) а воз ныне там. Прям как "Ахиллесова пята" по больным пяткам

Редактировалось 1 раз(а), последний 2017-06-29 20:27:37
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 1926
Рейтинг: 172
#12: 2017-06-30 18:20:42 ЛС | профиль | цитата
Напридумывать-то можно много, но дело не в этом. Понятно, что просто перевернуть строку я сумею. Но проблема в отсутствии функции в штатном компоненте. Я именно эту проблему поднимал.
карма: 9
0
Разработчик
Ответов: 26149
Рейтинг: 2127
#13: 2017-06-30 19:00:50 ЛС | профиль | цитата
andrestudio писал(а):
swap для локальных переменных и массивов как нефиг делать

Че-то в упор не помню такого, ссыль на это обсуждение есть?
3042 писал(а):
Но проблема в отсутствии функции в штатном компоненте. Я именно эту проблему поднимал.

ЕМНИП, то Galkov этот компонент курирует, если сделает, то я добавлю, но сам туда не полезу.
карма: 22

0
Ответов: 8926
Рейтинг: 823
#14: 2017-06-30 19:05:15 ЛС | профиль | цитата
3042, ну я же говорил
Леонид писал(а):
Внимательно прочитайте примечания к точкам

Прочитайте на картинке:
ПорядокСледованияБайтов.jpg
карма: 19

0
Ответов: 5227
Рейтинг: 587
#15: 2017-06-30 19:10:35 ЛС | профиль | цитата
IC внештатный компонент

nesco писал(а):
Че-то в упор не помню такого, ссыль на это обсуждение есть?

nesco, без наездов, на это у меня память хорошая, то что форум покоцан и поиск ни какой то это не ко мне...

p.s конечно можно на носороге оторваться, зачем ТС нервировать с правками по КОЛ.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)