Работа со строками
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
- Подробности
- Родительская категория: Работа со строками
- Категория: Преобразования строк из и в другие типы
Страница 7 из 21