fork download
  1. program ideone;
  2. uses sysutils, classes;
  3.  
  4. procedure WriteString(stream : TStream; s : AnsiString);
  5. var
  6. len: Cardinal;
  7. begin
  8. len := Length(s);
  9. stream.Write(len, sizeof(cardinal));
  10. if len > 0 then
  11. stream.Write(s[1], len);
  12. end;
  13.  
  14. function ReadString(stream : TStream) : AnsiString;
  15. var
  16. len: Cardinal;
  17. begin
  18. stream.Read(len, sizeof(cardinal));
  19. SetLength(ReadString, len);
  20. if len > 0 then
  21. stream.Read(ReadString[1], len);
  22. end;
  23.  
  24. procedure HexDump(p: Pointer; size: Cardinal);
  25. type
  26. ByteArray = array of Byte;
  27. var
  28. i: Integer;
  29. b: ByteArray;
  30. begin
  31. b := p;
  32. for i := 0 to size-1 do
  33. begin
  34. if (i <> 0) and ((i mod 16) = 0) then
  35. WriteLn;
  36. Write(IntToHex(b[i], 2), ' ');
  37. end;
  38. WriteLn;
  39. end;
  40.  
  41. var
  42. stream: TMemoryStream;
  43. i:Integer;
  44. begin
  45. stream := TMemoryStream.Create;
  46. WriteString(stream, 'Hui');
  47. WriteString(stream, 'Pizda');
  48. WriteString(stream, '');
  49. WriteString(stream, 'Djigurda');
  50.  
  51. HexDump(stream.Memory, stream.Size);
  52.  
  53. stream.Seek(0, soBeginning);
  54.  
  55. writeln('''', ReadString(stream) , '''');
  56. writeln('''', ReadString(stream) , '''');
  57. writeln('''', ReadString(stream) , '''');
  58. writeln('''', ReadString(stream) , '''');
  59. end.
Success #stdin #stdout 0s 880KB
stdin
stdout
03 00 00 00 48 75 69 05 00 00 00 50 69 7A 64 61 
00 00 00 00 08 00 00 00 44 6A 69 67 75 72 64 61 
'Hui'
'Pizda'
''
'Djigurda'