Как я могу преобразовать строку в гекс, не меняя ее длину? - PullRequest
0 голосов
/ 30 июня 2011

Я конвертирую строку в шестнадцатеричное, но когда я конвертирую, шестнадцатеричный код имеет длину 2 * (строка), могу ли я сделать так, чтобы "длина строки = длина шестнадцатеричной строки" была возможна?

Я нашел этот код, он работает?

var
  fs: TFileStream;
  temp: Char;
  buffer: string;
  pBuffer: PAnsiChar;
  text: PAnsiChar;
begin
  fs := TFileStream.Create('file way', fmOpenRead or fmShareDenyNone);
  fs.Position := 0;
  while fs.Position < fs.Size do
  begin
    fs.Read(temp, 1); //buffer içine her defasında 1 byte gelir.
    buffer := buffer + temp;
  end;
  pBuffer := PAnsiChar(buffer);
  BinToHex(pBuffer, text, Length(buffer));
  Memo1.Text := text;
end;

1 Ответ

3 голосов
/ 30 июня 2011

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

Восемь-битные значения (или любая длина от пяти до восьми бит)требуется две шестнадцатеричные цифры на значение.

...