Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Integer -> PChar


Автор: RinOSpro 24.1.2008, 22:32
Как перевести Integer в PChar?

Автор: Qu1nt 24.1.2008, 23:25
Код

PChar(i);

Автор: kemiisto 24.1.2008, 23:26
Может так:
Код

PChar(IntToStr(i))

Автор: RinOSpro 25.1.2008, 11:49
Qu1nt - вылетает ошибка.
kemiisto - пишу без string и динамических массивов, IntToStr не подойдет.

Автор: and85 25.1.2008, 12:28
Код

P := PChar (I);

вот пример - доказательство, что работает
Код



procedure TForm4.FormCreate(Sender: TObject);
var
  I: Integer;
  P: PChar;
begin
  I := 1;

  P := PChar (I);

  ShowMessage(IntToStr(Integer(P)));

end;
 
как и положенно 1 выводит

Автор: Alexeis 25.1.2008, 12:51
Код

function IntToC_str(val : Integer; s : PChar; maxchars : integer) : boolean;
var
  i, dec, fr, strpos : Integer;
  ch : Char;
begin
  Result := False;
  dec    := abs(val);
  strpos := 0;
  if (maxchars > 0)
  then
    repeat
      fr  := dec mod 10;
      dec := dec div 10;
      s[strpos] := Chr(Ord('0') + fr);
      Inc(strpos);
      if (strpos >= maxchars-2)
      then
        exit;
    until (dec = 0);
  else
    Exit;

  if (val < 0)
  then
    begin
      s[strpos] := '-';
      Inc(strpos);
    end;
  s[strpos] := #0;

  for i := 0 to strpos div 2 - 1
  do
    Begin
      ch := s[i];
      s[i] := s[strpos - i - 1];
      s[strpos - i - 1] := ch;
    end;
  Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s : array [0..127] of Char;
begin
  if IntToC_str(-4523, s, 128)
  then
    Edit1.Text := s;
end;

Автор: RinOSpro 25.1.2008, 15:23
Alexeis  спасибо. Не понял как это работает но это работает smile

Автор: Snowy 25.1.2008, 15:32
Код

var
  i: integer;
  s: string;
  p: PChar;
begin
  i := 12345;
  str(i, s);
  p := PChar(s);


Автор: Alexeis 25.1.2008, 15:47
Цитата(RinOSpro @  25.1.2008,  14:23 Найти цитируемый пост)
Не понял как это работает но это работает

  Суть в том, что на каждом шаге число делиться на 10 и извлекается остаток от деления, который по сути одна цифра. Цифре ставиться в соответствии символ, но поскольку цифры извлекаются в обратном порядке, то и в строку они тоже попадают в обратном порядке (сначала младшие, потом старшие), поэтому вконце я меняю порядок символов на обратный. Строка должна быть достаточной длины, чтобы вместить число + знак иначе прямая дорога а Access Violation. Поскольку модулем SysUtils тут и не пахнет, то try / except тоже недоступна. 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)