Code:

function IntToBin1(Value: Longint; Digits: Integer): string;

var

i: Integer;

begin

Result := '';

for i := Digits downto0do

if Value and (1shl i) <> 0then

Result := Result + '1'

else

Result := Result + '0';

end;

 

Взято с сайта: https://www.swissdelphicenter

 

 

 


 

 

Code:

function IntToBin2(d: Longint): string;

var

x, p: Integer;

bin: string;

begin

bin := '';

for x := 1to8 * SizeOf(d) do

begin

if Odd(d) then bin := '1' + bin

else

bin := '0' + bin;

d := d shr1;

end;

Delete(bin, 1, 8 * ((Pos('1', bin) - 1) div8));

Result := bin;

end;

 

Взято с сайта: https://www.swissdelphicenter

Many Windows functions claim to want PChar parameters in the documentation, but they are defined as requiring LongInts.

Is this a bug?

 

No, this is where "typecasting" is used. Typecasting allows you to fool the compiler into thinking that one type of variable is of another type for the ultimate in flexibility. The last parameter of the Windows API function SendMessage() is a good example. It is

documented as requiring a long integer, but commonly requires a PChar for some messages (WM_WININICHANGE). Generally, the variable you are typecasting from must be the same size as the variable type you are casting it to. In the SendMessage example, you could typecast a PChar as a longint, since both occupy 4 bytes of memory:

 

Code:

var

s : array[0..64] of char;

begin

StrCopy(S, 'windows');

SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@S));

end;

Code:

{ **** UBPFD *********** by delphibase.endimus.com ****

>> Преобразование строки S в набор её чисел,

где каждое число представляет каждый символ строки

 

Получив строку S функция преобразует её в набор чисел, каждое из которых

обозначает код текущего символа, а перед каждым числом располагается символ "#".

Пусть, например, S = 'Hello';

Тогда Result = '#72#101#108#108#111';

 

Зависимости: system

Автор: VID, Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра., ICQ:132234868, Махачкала

Copyright: VID

Дата: 25 апреля 2002 г.

***************************************************** }

 

function StrToAscii(S: string): string;

var

I, X: Integer;

RS: string;

CurChar: string;

begin

Result := '';

if Length(S) = 0then

Exit;

X := 1;

for I := 1to Length(S) do

begin

CurChar := '#' + Inttostr(Ord(S[I]));

Insert(CurChar, RS, X);

X := X + Length(CurChar);

end;

Result := RS;

end;

Code:

{ **** UBPFD *********** by kladovka.net.ru ****

>> Конвертация PWideChar в String

 

Автор: Gua, Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра., ICQ:141585495, Simferopol

Copyright: Andre .v.d. Merwe

Дата: 18 июля 2002 г.

********************************************** }

 

function PWideToString(pw : PWideChar) : string;

var

p : PChar;

iLen : integer;

begin

iLen := lstrlenw( pw ) + 1;

GetMem( p, iLen );

 

WideCharToMultiByte( CP_ACP, 0, pw, iLen, p, iLen * 2, nil, nil );

 

Result := p;

FreeMem( p, iLen );

end;

Code:

function NumStringToBCD(const inStr: string): string;

function Pack(ch1, ch2: Char): Char;

begin

Assert((ch1 >= '0') and (ch1 <= '9'));

Assert((ch2 >= '0') and (ch2 <= '9'));

{Ord('0') is $30, so we can just use the low nybble of the character

as value.}

Result := Chr((Ord(ch1) and$F) or ((Ord(ch2) and$F) shl4))

end;

var

i: Integer;

begin

if Odd(Length(inStr)) then

Result := NumStringToBCD('0' + instr)

elsebegin

SetLength(Result, Length(inStr) div2);

for i := 1to Length(Result) do

Result[i] := Pack(inStr[2 * i - 1], inStr[2 * i]);

end;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

var

S1, S2: string;

begin

S1 := '15151515151515151515';

S2 := NumStringToBCD(S1);

memo1.lines.add('S1: ' + S1);

memo1.lines.add('Length(S2): ' + IntToStr(Length(S2)));

memo1.lines.add('S2 unpacked again: ' + BCDToNumString(S2));

end;

 

 

 

Взято с сайтаhttps://www.swissdelphicenter.ch/en/tipsindex