Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.19;
Скачать: CL | DM;

Вниз

Из чара(ord), в нормальный вид.   Найти похожие ветки 

 
The Sound ©   (2006-01-31 20:46) [0]

Уважаемые мастера. Такой вопрос, имееться строчка, типа:
"84 104 105 115 32 115 111 102 116 119 97 114 101 32 105 115"
Где каждое из числа, являеться символом, в Чаре(ord).
В сущности код, преобразовавший символы в чиста приблезительно выглядит так:

textC := StrLen(PChar(textF));
For i :=1 to textC do
 begin
  textR := chr(ord(textF[i]));
  textI := ord(textR);
  textN := textN+" "+IntToStr(textI)
 end;

Так, вот, подскажите, как преобразовать код, что бы он (подлец) обратно кодировал?
Заранее, большое спасибо за ответы ;)


 
The Sound ©   (2006-01-31 20:55) [1]

Ах, да, если это упростит дело, то:

 textN, textF: string;
 i, textC, textI: integer;
 textR: char


 
Desdechado ©   (2006-01-31 21:09) [2]

что во что?
у тебя есть взаимнообратные функции chr и ord, что еще надо?


 
The Sound ©   (2006-01-31 21:10) [3]

Desdechado ©   (31.01.06 21:09) [2]
Я не понимаю как обратно =(


 
Zeqfreed ©   (2006-01-31 21:11) [4]

The Sound ©   (31.01.06 20:46)
Если я правильно понял, то IntToStr(Ord(YourChar)).


 
The Sound ©   (2006-01-31 21:15) [5]

Zeqfreed ©   (31.01.06 21:11) [4]
Несовсем, дело в том, что в начале мы имеем строчку типа "84 104 105 115"
то есть считывать по 1-му символу не есть гуд. рейдёться считывать стр-ом, до пробела, переводить в символ, и тд.

Задача намного труднее чем первоначальная. Я не знаю как её реализовать =(


 
Zeqfreed ©   (2006-01-31 21:37) [6]

The Sound ©   (31.01.06 21:15) [5]

TDynByteArray = array of Byte;

. . .

function StrToByteArr(const Source : String; var a : TDynByteArray) : Integer;
var
 Str : TStrings;
 i : Integer;
begin
 Result := -1;

 Str := TStringList.Create();
 try
  Str.Delimiter := " ";
  Str.DelimitedText := Source;

  if Str.Count <= 0 then Exit;
  SetLength(a, Str.Count);
  for i := 0 to Str.Count - 1 do begin
   try
    a[i] := Byte(StrToInt(Str[i]));
   except end;
  end;

  Result := Str.Count;
 finally
  Str.Free;
 end;
end;


 
Gydvin ©   (2006-01-31 21:39) [7]

function perekod (s:string):string;
var
s1:string;
begin

 if s="" then exit;
while s[length(s)]=" " then delete(s,length(s),1);
 if s="" then exit;

while s[1]=" " then delete(s,1,1);
 if s="" then exit;
 s:=s+" ";
 result:="";
while pos(" ",s)>0 do begin
    s1:=copy(s,1,pos(" ",s)-1);
    result:=result+chr(strtoint(s1));
   delete(s,1,pos(" ",s));
end;
end;


 
The Sound ©   (2006-01-31 21:54) [8]

Zeqfreed ©   (31.01.06 21:37) [6]
Gydvin ©   (31.01.06 21:39) [7]

Утром буду разбираться.
Спасибо что неполенились написать код %)


 
Zeqfreed ©   (2006-01-31 21:58) [9]

Gydvin ©   (31.01.06 21:39) [7]
Очень тормознутая ф-ция. Рискну предложить свой вариант :)

function ByteStrToCharStr(const Source : String) : String;
const
 Spaces = [" ", #9];
var
 i, int : Integer;
 token : String;
begin
 Result := "";

 token := "";
 i := 1;
 repeat
  if (Source[i] in ["0".."9"]) then
   token := token + Source[i]
  else if (Source[i] in Spaces) then begin
   if (token <> "") then begin
    int := StrToInt(token);
    if (int <= High(Byte)) and (int > 0) then
     Result := Result + Chr(int)
    else
     raise Exception.Create(Format("Argument before pos %d exceeds 8-bit boundary", [i]));

    token := "";
   end;
  end else
   raise Exception.Create(Format("Invalid char at pos: %d", [i]));

  Inc(i);
 until (i = length(Source));
end;


 
Gydvin ©   (2006-01-31 22:03) [10]

Corry, засыпаю

function perekod (s:string):string;
var
s1:string;
begin

if s="" then exit;
while s[length(s)]=" " do delete(s,length(s),1);
if s="" then exit;

while s[1]=" " do delete(s,1,1);
if s="" then exit;
s:=s+" ";
result:="";
while pos(" ",s)>0 do begin
   s1:=copy(s,1,pos(" ",s)-1);
   result:=result+chr(strtoint(s1));
  delete(s,1,pos(" ",s));
end;
end;


 
Gydvin ©   (2006-01-31 22:10) [11]

Zeqfreed ©   (31.01.06 21:58) [9]
Последняя цифра неучитывается


 
Zeqfreed ©   (2006-01-31 22:20) [12]

Gydvin ©   (31.01.06 22:10) [11]
Да, разумеется, надо знак «больше» вместо «равно».

Gydvin ©   (31.01.06 22:03) [10]
М-м, по-моему этот тот же самый код? Быстрее он не стал, кажется :)

P.S. http://en.wikipedia.org/wiki/Corry ? :)


 
Gydvin ©   (2006-01-31 22:20) [13]

Zeqfreed ©   (31.01.06 21:58) [9]
Кстати автор нехотел читать по одному символу :(
(The Sound ©   (31.01.06 21:15) [5])

хотя у тебя гораздо лучше, с проверками

зы. а зачем #9


 
Zeqfreed ©   (2006-01-31 22:22) [14]

Gydvin ©   (31.01.06 22:20) [13]

> Кстати автор нехотел читать по одному символу :(

По-другому нельзя. Только если какой-нибудь хитрый предсказывающий ИИ писать.

> зы. а зачем #9

Spaces = [" "]; выглядит некрасиво ;)


 
Gydvin ©   (2006-01-31 22:38) [15]

М-м, по-моему этот тот же самый код? Быстрее он не стал, кажется :)


Ошибка была, then вместо do

можно и так

function perekod (s:string):string;
var
x,i:integer;
s1:string;
begin
 if s="" then exit;
while s[length(s)]=" " do delete(s,length(s),1);
if s="" then exit;

while s[1]=" " do delete(s,1,1);
if s="" then exit;
s:=s+" ";
for x:=1 to length(s) do
 if s[x]<>" " then s1:=s1+s[x] else
begin
  try
     i:=strtoint(s1);
  except
     showmessage("Error");
      exit;
  end;
  s1:="";
  if (i <= 255) and (i > 0) then else exit;
result:=result+chr(i);
end;
end;




Страницы: 1 вся ветка

Текущий архив: 2006.02.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.242 c
2-1138126468
aviseral
2006-01-24 21:14
2006.02.19
Работа с MS Excel


15-1138350445
syte_ser78
2006-01-27 11:27
2006.02.19
проблемы с украинской буквой І


2-1139048231
Officeman
2006-02-04 13:17
2006.02.19
Как програмно узнать есть ли коннект с интернетом.?


8-1126471394
VasRoG
2005-09-12 00:43
2006.02.19
Освещение в OpenGL


11-1119970812
Alex1
2005-06-28 19:00
2006.02.19
Как работать с TreeView