Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Преобразование... Int64 в строку [D7]


Цукор5 ©   (2007-01-05 17:34:00) 

Есть строка, например : 04820001123456.
Надо преобразовать ее к виду : Chr($04)+Chr($82)+Chr($0)+...

Делаю так :

Line:='04820001123456';
I:=StrToInt64Def('$'+Line,0); //где  I:Int64

// далее проблемный код
Q:=I; //где Q:DWord. копирую младшее слово
...
Result:=Chr(Lo(LoWord(Q)))+Chr(Hi(LoWord(Q)))+...

Надеюсь смысл понятен.

Вопрос в следующем. А нет ли способа попроще ??? Без всяких Lo,LoWord и т.д.


begin...end   (2007-01-06 22:22:00) [1]

> Цукор5   (06.01.07 13:18) [11]

HexToBin находится в модуле Classes.


DevilDevil   (2007-01-06 19:19:00) [2]

А я вот вопроса не понял. Покажи, что должно быть на входе, что на выходе; в каких типах.


sniknik   (2007-01-06 13:52:00) [3]

> А где взять  ReverseString, HexToBin ??? В модулях D7 я их не обнаружил!!!
курсором встать на слово и нажать Ctrl+F1


Цукор5   (2007-01-06 13:18:00) [4]

2 begin...end,sniknik

А где взять  ReverseString, HexToBin ??? В модулях D7 я их не обнаружил!!!


begin...end   (2007-01-06 10:27:00) [5]

var
 s1, s2: string;
begin
 s1 := '04820001123456';
 SetLength(s2, Length(s1) div 2);
 HexToBin(PChar(s1), PChar(s2), Length(s2));
end


sniknik   (2007-01-05 21:32:00) [6]

через string, например так

procedure TForm1.Button1Click(Sender: TObject);
var
 s: string;

 function Conv(const s: string): string;
 var
   i: ^int64;
 begin
   SetLength(result, 8);
   i:= @result[1];
   i^:= StrToInt64Def('$'+s, 0);
   result:= ReverseString(result);
 end;

begin
 s:= Conv('04820001123456');
 Label1.Caption:= s;
end;


p.s. переменная s введена специально, посмотреть результат при трассировке... можно сразу присвоить Label1.Caption-у, только там ничего видно изза лидирующего нуля не будет.


sniknik   (2007-01-05 21:16:00) [7]

> тот же конец строки
для pchar, если делать через string то нет.


sniknik   (2007-01-05 21:14:00) [8]

> А нет ли способа попроще ??? Без всяких Lo,LoWord и т.д.
var
 i: int64;
 ch: array[0..7] of char absolute i;
begin
 i:= StrToInt64Def('$04820001123456', 0);
 Result:= ReverseString(ch);
end;


имхо будет тоже самое, правда смысла большого в этом нет, 0 в середине/начале это тот же конец строки поэтому часть обрежется. вот если бы это изначально стока была "преобразованная" в int64... то получилось бы правильно.


Palladin   (2007-01-05 17:51:00) [9]

сегодня день тупления
for i:=1 to length(s1) div 2 Do s2[i]:=chr(strtoint(copy(s 1,(i*2)-1,2)));


Palladin   (2007-01-05 17:50:00) [10]

нет, ну надо же так ступить...

var
s1,s2:String;
i:Integer;

s1:='04820001123456';
setlength(s2,length(s1) div 2);
for i:=1 to length(s1) div 2 Do s2[i]:=chr(strtoint(copy(s2,(i*2)-1,2)));


Palladin   (2007-01-05 17:47:00) [11]

IntToHex(StrToInt64Def('$'+Line,0),2)


AlexanderMS   (2007-01-05 17:45:00) [12]

Что-то не понял.

Преобразование... Int64в строку
Есть строка, например : 04820001123456


Цукор5   (2007-01-05 17:44:00) [13]

2 AlexanderMS
Господин, не мешайте.
Вы хоть вопрос читали ???


AlexanderMS   (2007-01-05 17:40:00) [14]

IntToStr?


Наверх

Титульная страница Поиск, карта сайта Написать письмо