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

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

HexToStr


Страницы:   1 2 3

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 и так уже строка.


Страницы:   1 2 3

Наверх

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