Текущий архив: 2006.07.16;
Скачать: CL | DM;
Внизполучение шестнадцатиричного значения символа в delphi и наоборот Найти похожие ветки
← →
простак (2006-06-29 10:34) [0]Прежде всего здравствуйте! Не мог бы кто-нибудь помочь мне в моей проблеме: мне нужно сделать следующие преобразования на Delphi -
Пример: "45 00 BC" -> "E ј" в ANSCI
или "45 00 BC" -> "E ¼" в ASCII
а как это сделать я соответственно не знаю
Символы иногда представлены вот такими вот закорючками:
╘ z ⌠ Σ ç ╗ æ J 4 S
В инете нашел функции: BytesToHexStr, HexStrToBytes, HexBytesToChar, только мне не понятно как с ними работать... Может кто чего подскажет мне, новичку? заранее спасибо
← →
Jeer © (2006-06-29 11:18) [1]Разбить строку на пары по пробелу.
Каждую пару преобразовать из hex в int (функциями HexToInt или HexToBin)
Преобразованием типа char() перевести в знак символа.
Слепить итоговую строку.
← →
Desdechado © (2006-06-29 11:18) [2]так тебе число в символ или "число в строке" в символ?
← →
начинающий1 (2006-06-29 12:12) [3]мне нужно число в символ... а апострофы я поставил для удобства... но если я пытаюсь например преобразовать 87 в символ у меня получается "W" а в примере - "‡" или "З" не понимаю откуда они берутся...
В тотал коммандере через листер открываю файл и выбираю просмотр через режим Hex - слева отображаются шестнадцатиричные числа а справа символы-закорючки, соответствующие этим числам... так вот проблема-то в том что я не найду реализации этого соответствия (из 16-ой -Ю символ и из символа 16-ую). PS функции HexToInt нет в стандартных модулях Delphi7. а что делать потом с бинарным кодо я не представляю...
← →
простак (2006-06-29 12:16) [4]извините ввел не то имя начинающий = простак
← →
простак (2006-06-29 12:28) [5]В принципе char работает... я нашел ошибку перед числом надо поставить знак, определяющий шестнадцатиричное число, и, если написать вот так -
c:=char($B4);
memo2.Lines.Add(c);
то все работает. Остается понять как выполнить обратное преобразование
и по имеющемуся "c" получить "B4". Ни у кого нет идей?
← →
ЮЮ © (2006-06-29 12:31) [6]См. Chr и Ord функции
← →
unknown © (2006-06-29 12:36) [7]
procedure TForm1.Button1Click(Sender: TObject);
var
x: string;
function HexToChars(s: string): string;
var
i: integer;
buf: string;
begin
for i := 1 to Length(s) do
if not (s[i] in ["0".."9", "A".."F", "a".."f"]) then
begin
if buf > "" then
Result := Result + Chr(StrToInt("$" + buf)) + " ";
buf := "";
end
else
buf := buf + s[i];
if buf > "" then
Result := Result + Chr(StrToInt("$" + buf)) + " ";
end;
function CharsToHex(s: string): string;
var
i: integer;
begin
for i := 1 to Length(s) do
if s[i] <> " " then
Result := Result + IntToHex(Ord(s[i]), 2)
else
Result := Result + " ";
end;
begin
x := HexToChars("57 87 99 aa bb cc dd ee ff");
Caption := x + " = " + CharsToHex(x);
end;
← →
простак (2006-06-29 19:17) [8]Спасибо за листинг, это работает почти всегда - но если заменить в вашем примере любую пару чисел на 00 работать не будет - на экран ничего не выводится и никакие мои ухищрения не помогают: скорее всего из-за того что я не знаю причины ошибки. И что вообще обозначает пара 00? в ANCII это выглядит как пробел, но пробел в то же время это 20. PS и вот такой еще вопрос навернулся - почему в Memo ""плохо"" открываются файлы с символами-""закорючками"", то один файл открывается наполовину, а другой выводит самый первый символ. Расширение файлов *.bin, открываю через OpenDialog, используя Memo.Lines.LoadFromFile.
← →
unknown © (2006-06-29 19:29) [9]
> простак (29.06.06 19:17) [8]
> любую пару чисел на 00
Естесственно, #0 - окончание строки.
Надо в таком случае array of byte использовать.
← →
unknown © (2006-06-29 19:32) [10]
> простак
Вообще, какая цель стоит?
А то
> почему в Memo ""плохо"" открываются файлы с символами-""закорючками""
как-то очень подозрительно звучит.
← →
Gydvin © (2006-06-29 19:42) [11]
> простак (29.06.06 19:17) [8]
Повторяеетесь! Хоть вопросы бы на предложенные решения меняли
Страницы: 1 вся ветка
Текущий архив: 2006.07.16;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.008 c