Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Вниз

получение шестнадцатиричного значения символа в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
15-1150446709
LingvoRu
2006-06-16 12:31
2006.07.16
Мощная фраза


6-1134736695
SPACE!!
2005-12-16 15:38
2006.07.16
Клт.-Серв. приложение на WinSock с большим количеством клиентов.


2-1150704258
DmitriyR
2006-06-19 12:04
2006.07.16
Запуск программ с передачей консольного ввода и чтением вывода


15-1150206347
palva
2006-06-13 17:45
2006.07.16
Как поставить плагин к DJVU


15-1150290399
Piter
2006-06-14 17:06
2006.07.16
Чертежи теплообменных аппаратов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский