![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Преобразование... 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?