преобразовать данные в шестнадцатеричном формате в строку - PullRequest
2 голосов
/ 04 марта 2011

У меня есть некоторые данные, отформатированные в шестнадцатеричном формате (хранящиеся в байтах), которые мне нужно преобразовать в строку, данные должны быть такими:

13 61 23 45 67 8F FF

и ожидаемый результат

13612345678FFF

Я знаю, что функция Chr () или IntToStr () не будет работать, так как эти данные не фактический шестнадцатеричный код, а строка / число, отформатированные в шестнадцатеричном формате, так что у кого-нибудь есть для этого какие-нибудь предложения?

Ответы [ 2 ]

4 голосов
/ 04 марта 2011

Это для преобразования динамического массива байтов в шестнадцатеричную строку:

function BytesToHex(aSource: TBytes): string;
begin
  SetLength(Result, Length(aSource) * 2);
  if Length(aSource) > 0 then
    BinToHex(aSource[0], PChar(Result), Length(aSource));
end;

Если ваши исходные байты не находятся в динамическом массиве, вам придется немного изменить код, но он должендать вам общее представление о том, как это сделать.

1 голос
/ 04 марта 2011

С примером, который вы предоставили, почему бы вам просто не убрать пробелы?

s := '13 61 23 45 67 8F FF';

stripped := StrUtils.ReplaceStr(s,' ','');

если ваша шестнадцатеричная строка не слишком длинная, вы можете получить ее в виде числа, такого как:

MyInt64 := StrToInt64('$' + stripped);

Проверьте HexToBin(), если хотите получить шестнадцатеричную строку в виде массива байтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...