Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader. / 9 сообщений из 9, страница 1 из 1
21.01.2022, 20:07
    #40128583
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader.
Что бы умел основные типы сериализовать туда/оттуда.

Ы?

Хочу странного: аналог TMemoryStream + TStreamWriter но в виде record-а, без создания TStream.
...
Рейтинг: 0 / 0
21.01.2022, 20:38
    #40128592
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader.
TBytesStream?
...
Рейтинг: 0 / 0
21.01.2022, 20:48
    #40128595
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader.
Как я уже сказал - не хочу объекты создавать на каждый рекорд.
...
Рейтинг: 0 / 0
21.01.2022, 20:49
    #40128596
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader.
Еще бы такой сериализатор, что бы умел писать reverse bytes...
...
Рейтинг: 0 / 0
21.01.2022, 20:54
    #40128599
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader.
rgreat
Как я уже сказал - не хочу объекты создавать на каждый рекорд.
Тогда record helper. Но писать придется самому. Но один раз.
...
Рейтинг: 0 / 0
21.01.2022, 21:05
    #40128600
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader.
У меня есть груда функций типа:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
function DirectGetFloat(s : RawByteString): single;
var
  p_d : ^single;
begin
  if vsInverseBytes then SwapBytes(s);
  p_d:=@s[1];
  result:=p_d^;
end;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function DirectSetFloat(Data : Single): RawByteString;
var
  p:^Single;
begin
  Result:='';
  SetLength(result,sizeof(Single));
  p:=@result[1];
  p^:=Data;
  if vsInverseBytes then SwapBytes(result);
end;



После чего делается что-то типа:
Код: pascal
1.
2.
3.
4.
5.
    var Buff:=DirectSetInt(FuncID)+
              DirectSetByte(Byte(TWMResult.AUTH_NEEDED))+
              DirectSetInt(0);
              DirectSetString('Not Logged In');
    Connection.Write(DirectSetInt(length(Buff))+Buff);


Ну душа просит прекрасного...
...
Рейтинг: 0 / 0
21.01.2022, 21:41
    #40128607
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader.
rgreat
Ну душа просит прекрасного...

Остается понять - что это для тебя значит ...
Придумай красивый API, напиши на нем пример, и по циклу до получения экстаза. А реализация - г... вопрос.
...
Рейтинг: 0 / 0
22.01.2022, 11:32
    #40128663
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader.
...
Рейтинг: 0 / 0
23.01.2022, 22:47
    #40128878
Bred eFeM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader.
жестяк... с дин массивами ... ))
rgreatНу душа просит прекрасного...
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
function Swap(A:Cardinal):Cardinal;
asm
{$IFDEF CPUX64}
 .NOFRAME
 mov    rax, rcx
{$ENDIF}
 bswap  eax
end;

procedure AddFloat(var F:Single; var Ptr:PByte); // + var InOutCheckLen:Integer
var
 D : Cardinal absolute F;
begin
 PCardinal(Ptr)^ := Swap(D);
 Inc(Ptr,SizeOf(Cardinal));
end;

procedure GetFloat(var F:Single; var Ptr:PByte); // + var InOutCheckLen:Integer
var
 D : Cardinal absolute F;
begin
 D := Swap(PCardinal(Ptr)^);
 Inc(Ptr,SizeOf(Cardinal));
end;


function Testa(Inp:PByte):TBytes;
var
 Flt: Single;
 Ptr, Otp: PByte;
 Len:Cardinal;
begin
 SetLength(Result,100500);
 Ptr := @Result[Low(Result)];
 Otp := Ptr+SizeOf(Len);
 //
 GetFloat(Flt, Inp);
 AddFloat(Flt, Otp);
 //
 AddString(Str, Otp);
 AddEtc(Etc, Otp);
 //
 Len := Otp - Ptr;
 AddLen(Len, Ptr);
 //
 Result := Copy(Result, Low(Result), Len);
end;


Добавить
Код: plaintext
class operator
по вкусу
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
function DirectGetFloat(s : RawByteString): single;
var
  p_d : ^single;
begin
  if vsInverseBytes then SwapBytes(s);
  p_d:=@s[1];
  result:=p_d^; // Если где-то проскочит не IEEE754, то будет оЙ
end;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader. / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]