powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader.
9 сообщений из 9, страница 1 из 1
Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader.
    #40128583
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что бы умел основные типы сериализовать туда/оттуда.

Ы?

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

Код: 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
Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader.
    #40128607
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Ну душа просит прекрасного...

Остается понять - что это для тебя значит ...
Придумай красивый API, напиши на нем пример, и по циклу до получения экстаза. А реализация - г... вопрос.
...
Рейтинг: 0 / 0
Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader.
    #40128663
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader.
    #40128878
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жестяк... с дин массивами ... ))
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
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подскажите какой-нибудь сахарок для TBytes, нечто вроде TStreamWriter/TStreamReader.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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