Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

Hex в String и наоборот   Найти похожие ветки 

 
Ken   (2004-11-22 09:46) [40]

Ув. мастера, подкиньте пожалуйста пару ссылок на доки где про ето можно прочитать хорошенько! Тоже интересно разобраться!
Спасибо.


 
Rutven ©   (2004-11-22 10:26) [41]

Что вы мучаетесь.
Есть же замечательные функции в Delphi - BinToHex и HexToBin.
Всё замечательно работает.


 
Al1   (2004-11-22 14:37) [42]


> Есть же замечательные функции в Delphi - BinToHex и HexToBin.

Мне надо строку в Hex а не BinToHex


 
Anatoly Podgoretsky ©   (2004-11-22 15:40) [43]

Еще раз ХЕКС уже строка


 
Al1   (2004-11-22 15:54) [44]


> Anatoly Podgoretsky ©   (22.11.04 15:40) [43]
> Еще раз ХЕКС уже строка


и?

var buf : array of byte;
   s : string;
Buf := s; ???

как перевести?


 
Anatoly Podgoretsky ©   (2004-11-22 16:01) [45]

Уже перевел, но только строку в массив байтов, если конечно компилятор не обругает.


 
Al1   (2004-11-22 16:21) [46]

Хорошо а как узнать по символу его код?
(обратный процесс ф-ции Chr)


 
begin...end ©   (2004-11-22 16:23) [47]


> [46] Al1   (22.11.04 16:21)

> Хорошо а как узнать по символу его код?

Ord()


 
Al1   (2004-11-22 17:13) [48]

Уважаемые мастера, вроде получился у меня какойто результат:

type ArrayOfByte = array of byte;

implementation

{$R *.dfm}

function Hex2StrHex (Buf : array of byte; BufLength : integer):String;
var i : integer;
begin
Result := "";
for I := 1 to BufLength do
begin
  Result := Result + Format("%x", [Buf[I]])
end;
end;

function Hex2Str (Buf : array of byte; BufLength : integer):String;
var i : integer;
begin
Result := "";
for I := 1 to BufLength do
begin
  Result := Result + Chr(Buf[I]);
end;
end;

function StrHex2Hex (SHex : string; SHexLength : integer):ArrayOfByte;
var
I: Integer;

begin
if (SHexLength > 0) and (SHexLength mod 2 = 0) then
begin
  SetLength(Result, SHexLength div 2);
  for I := 0 to High(Result) do
  Result[I] := StrToInt("$" + Copy(SHex, I * 2 + 1, 2));
end;
end;

function Str2Hex (S : string; SLength : integer):ArrayOfByte;
var
I: Integer;

begin
if (SLength > 0) then
begin
  SetLength(Result, SLength);
  for I := 0 to High(Result) do
  Result[I] := Ord(S[i+1]);
end;
end;


Проверьте пожалуйста, может чтото не так?

И еще вопросик: а как обьявить function (): array of byte, не обьявляя новый тип: type ArrayOfByte = array of byte ???

Заранее спасибо.


 
begin...end ©   (2004-11-22 17:22) [49]


> [48] Al1   (22.11.04 17:13)

А зачем в функции передавать длины массивов и строк, когда их (длины) можно определять внутри функций?


 
Al1   (2004-11-22 17:28) [50]


> begin...end ©   (22.11.04 17:22) [49]
>
> > [48] Al1   (22.11.04 17:13)
>
> А зачем в функции передавать длины массивов и строк, когда
> их (длины) можно определять внутри функций?


на случай универсальности.... вдруг забудешь укоротить строчку, после работы с ней!... или в буфере допустим тебе надо будет скушать и обработать кусок а не весь!... :-)


 
begin...end ©   (2004-11-22 17:50) [51]


> [50] Al1   (22.11.04 17:28)

Зато можно что-то перепутать и передать, например, число, бОльшее, чем вообще возможно. А это уже будет выход за границы.

> [48] Al1   (22.11.04 17:13)


> function Hex2StrHex (Buf : array of byte; BufLength : integer):String;

> for I := 1 to BufLength do

Ошибка. Buf: array of Byte - это ОТКРЫТЫЙ массив. Для них, как и для динамических, нумерация элементов начинается с нуля. Здесь, ИМХО, лучше заменить array of byte на уже объявленный тобой тип - динамический массив - ArrayOfByte. Но нижний индекс всё равно будет равен нулю, так что советую здесь вместо 1 и BufLength использовать Low(Buf) и High(Buf).


 
Al1   (2004-11-22 18:01) [52]


> begin...end ©   (22.11.04 17:50) [51]

Понятно! Буду иметь ввиду! Спасибо.



Страницы: 1 2 вся ветка

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.03 c
4-1098611442
TeNY
2004-10-24 13:50
2004.12.05
Подскажите пожалуста,как узнать ширину текущего шрифта в пикселях


1-1101141727
Pirat1
2004-11-22 19:42
2004.12.05
Вопрос по поводу DLL


1-1100889661
markers
2004-11-19 21:41
2004.12.05
Как вызвать процедуру находящуюся в переменной.


14-1100773948
Drakon
2004-11-18 13:32
2004.12.05
Латинские крылатые выражения


1-1101258444
bulanov
2004-11-24 04:07
2004.12.05
Как быстро передвинуть Image?