![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
HexToStr
kiwooo © (2006-08-15 13:16:00)Привет! Искал в инетрнете способы перевода Hex - значения в Str элемент. Т.е. например
Hex := '757475';
HStr := HexToStr(Hex);
Итог HStr = "utu"
Решение проблемы-то я нашел, но интересует, как быстрее и лучше сделать эту операцию (HexToStr).
tesseract (2006-08-15 22:40:00) [21]> [23] Шпиён (15.08.06 22:15)
перегруз у меня :-)
тогда присоединяюсь к [2].
Шпиён (2006-08-15 22:15:00) [22]> HEX не строка - а целое число,
У автора вопроса переменная Hex - именно строка.
см. [0]
> Hex := '757475';
> HStr := HexToStr(Hex);
>
> Итог HStr = "utu"
Как с помощью
> tesseract © (15.08.06 16:46) [6]
> uses SysUtils
>
> hex:=$7575
> Hstr:=IntToHex(hex,4);
получается ожидаемый результат "utu" ?
Anatoly Podgoretsky (2006-08-15 21:59:00) [23]За это время автор ни разу голос не подал.
tesseract (2006-08-15 21:58:00) [24]> [17] Пусик © (15.08.06 21:34)
Пусик решил опять всех покозлить. Опять убеждаюсь в правоте той статьи.
Только попробуй доказать что $7575 Delphi не воспримет как шестнадцетиричное значение.
> IntToStr( StrToInt('$'+SomeHexString) );
Я так и делаю, если значение строковое.
> Пффф, то есть по вашему Hex - это не строка(в Delphi)? Так?
HEX не строка - а целое число, так мне доходчиво доказал преподователь по теории чисел в 1998 году.
При работе, например, с оборудованием оч полезно inttohex.
Kolan (2006-08-15 21:47:00) [25]
> Kolan © (15.08.06 21:40) [18]
Кстати заметте, что в IntToHex учитывается, что строка содержащая Нех может трактоватьзя по разному: Digits: Integer
Virgo_Style (2006-08-15 21:43:00) [26]Такое чувство, что надо что-то вроде
IntToStr( StrToInt('$'+SomeHexString) );
Пусик © (15.08.06 21:34) [17]
[5] абсолютно верен в контексте [0]
Kolan (2006-08-15 21:40:00) [27]Пффф, то есть по вашему Hex - это не строка(в Delphi)? Так?
function IntToHex(Value: Integer; Digits: Integer): string;overload;
...
Пусик (2006-08-15 21:34:00) [28]
> Kolan © (15.08.06 21:26) [16]
> > 2. Код из [7] делает это без преобразования.Он то делает,
> но вводит в заблуждение автора. И оставит его думать, что
> нех и строка разные вещи, а это одно и тоже;
Автор прекрасно понимает это.
Еще раз внимательноперечитай вопрос. И не надо предлагать:
1. неэффективных методов(подобных [3] и [11]) как единственно верных;
2. неверных, подобно [5];
3. откровенно бредовых, как в [6].
Kolan (2006-08-15 21:26:00) [29]
> 2. Код из [7] делает это без преобразования.
Он то делает, но вводит в заблуждение автора. И оставит его думать, что нех и строка разные вещи, а это одно и тоже;
К томуже понимание того как это ракботает позволит дать ф-ции понятное название, а не бредовоеHexToStr...
Пусик (2006-08-15 21:21:00) [30]
> Kolan © (15.08.06 21:15) [14]
> '075' это текстовый :)
И?
1. Правильность входных данных на совести автора.
2. Я знаю, что Земля не круглая, а Черное море не черное. И что?
> Kolan © (15.08.06 21:01) [11]
> > Пусик © (15.08.06 20:50) [10]Неплохо бы человеку обяснить,
> что он неверно задал вопрос..> kiwooo (15.08.06 13:16)
1. Нех - это и так строка.
2. А вом нужно Нех значение (например 75) превратить в число см. HexToBin
3. А затем полученое число преобразовать в символ см. Chr()
1. Так точно. Только зачем это повторять?
2. Код из [7] делает это без преобразования.
3. См. п. 2.
Kolan (2006-08-15 21:15:00) [31]'075' это текстовый :)
Пусик (2006-08-15 21:07:00) [32]
> А если я буду писать 075?
Обрати внимание, что 075 - не текстовыйтип
Kolan (2006-08-15 21:03:00) [33]
> SetLength(Result,StrLen(s)div 2);
А если я буду писать 075?
С таким же успехом можно было предложить вариант:
function HexToStr: string;
begin
Result := 'utu'
end;
:)
Kolan (2006-08-15 21:01:00) [34]
> Пусик © (15.08.06 20:50) [10]
Неплохо бы человеку обяснить, что он неверно задал вопрос..
> kiwooo (15.08.06 13:16)
1. Нех - это и так строка.
2. А вом нужно Нех значение (например 75) превратить в число см.HexToBin
3. А затем полученое число преобразовать в символ см.Chr()
Пусик (2006-08-15 20:50:00) [35]>Kolan © (15.08.06 20:44) [8]
ps. [5] - ответ неверный.
Пусик (2006-08-15 20:48:00) [36]
> Kolan © (15.08.06 20:44) [8]
> > Пусик © (15.08.06 20:35) [7]Ну и что это делает?
А теперь внимательнопрочитай вопрос. Можешь несколько раз.
Kolan (2006-08-15 20:44:00) [37]
> Пусик © (15.08.06 20:35) [7]
Ну и что это делает?
Врный ответ:
Anatoly Podgoretsky © (15.08.06 16:42) [5]
Пусик (2006-08-15 20:35:00) [38]> tesseract © (15.08.06 16:46) [6]
hex:=$7575
Hstr:=IntToHex(hex,4);
Это к чему? Совсем далеко от ответа.
>kiwooo (15.08.06 13:16)
Вот простенький пример:
function HexToStr(s:pchar):string;
begin
SetLength(Result,StrLen(s)div 2);
SetLength(Result,HexToBin(s, @result[1],StrLen(s)div 2));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Hex,Hstr:string;
begin
Hex := '757475';
HStr := HexToStr(pchar(Hex));
Label1.Caption:=HStr;
end;
tesseract (2006-08-15 16:46:00) [39]uses SysUtils
hex:=$7575
Hstr:=IntToHex(hex,4);
Anatoly Podgoretsky (2006-08-15 16:42:00) [40]hex и так уже строка.