Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Вниз

Из чара(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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.06 c
3-1135456112
Fed
2005-12-24 23:28
2006.02.19
Вычисляемое поле


15-1138036328
Loginov Dmitry
2006-01-23 20:12
2006.02.19
А что лучше Perl или PHP


6-1131478836
Bruce
2005-11-08 22:40
2006.02.19
Задержка при отправке данных. Indy.


15-1138594840
vidiv
2006-01-30 07:20
2006.02.19
Вопрос по MySQL: LEFT JOIN и RIGHT JOIN


2-1138881288
GoshaT
2006-02-02 14:54
2006.02.19
Вставить картинку в TRichEdit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский