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

Вниз

Кодировки и системы счисления   Найти похожие ветки 

 
Vitalik__   (2006-02-23 18:29) [0]

Неподскажите как мне перевести 16-ричное число в деcятичное, а затем его превратить в символ по кодировке в win
пример:
7f --> 111 --> b


 
Eraser ©   (2006-02-23 18:33) [1]


> Vitalik__   (23.02.06 18:29)

StrToInt, IntToStr, Chr + F1


 
Eraser ©   (2006-02-23 18:34) [2]

IntToStr опционально )) для обещего развития )


 
Desdechado ©   (2006-02-23 18:36) [3]

Format()

PS 16-ричное число в деcятичное - это способы представления числа, а само число все то же самое


 
Vitalik__   (2006-02-23 18:56) [4]

что-то неполучается.
а пример можно?

str:="7a";//переменной str присваиваем число - оно в 16-чной системе.
           //str - тип string

//как сделать так, чтобы в переменной result был символ, соответствующий
//"7а" в 16-ричной системе

result:=     ?


 
API   (2006-02-23 19:59) [5]

str:="7a";//переменной str присваиваем число - оно в 16-чной системе.
          //str - тип string


То, что str - тип string, верно. А "Переменной str присваиваем число" - не совсем верно. Правильнее сказать - строчное представление числа.

как сделать так, чтобы в переменной result был символ, соответствующий "7а" в 16-ричной системе

Для этого надо преобразовать строчное представление шестнадцатиричного числа в число, а затем получить символ, соответствующий этому числу в кодовой таблице.

Вот пример, соответствующий этой задаче:

function HextStrToCardinal(Str: string): cardinal; // Функция, преобразовывающая строку символов в целое число

 function HexCharCode(Ch: char): byte; // Функция, преобразовывающая одиночный символ, соответствующий 16-ричной цифре
 const
   HEX_CHARS: array[0..15] of string = ("0", "1", "2", "3", "4", "5", "6", "7",
                                        "8", "9", "a", "b", "c", "d", "e", "f");
 begin
   for Result := Low(HEX_CHARS) to High(HEX_CHARS) do
     if (HEX_CHARS[Result] = Ch) then
       Exit;
   raise Exception.Create("Str16ToInteger: Invalid argument character (" + Ch + ")"); //На случай, если во входной строке не все символы соответствуют шестнадцатиричным цифрам
 end;

var
 i: integer;
begin
 ASSERT(Length(Str) <= 8, "Str16ToCardinal: Argument too long (" + Str + ")"); // Не более 8 символов, иначе результат не поместится в cardinal
 Str := LowerCase(Str); // На случай, если введены символы "А".."F"
 Result := 0;
 for i := 1 to Length(Str) do
   Result := Result shl 4 + HexCharCode(Str[i]); // сдвиг предыдущего значения влево и суммирование с очередной 16-ричной цифрой
end;

function HexStrToChar(Str: string): char; // функция, выполняющая Вашу задачу - преобразование "7a" в "z"
begin
 Result := Chr(HextStrToCardinal(Copy(Str, 1, 2)));
end;


То есть, конечно, это одно из возможных решений...

Будут вопросы - задавайте...


 
begin...end ©   (2006-02-23 20:07) [6]

> API   (23.02.06 19:59) [5]

Абалдеть. См. [1].

StrToInt("$" + ...)


 
Zeqfreed ©   (2006-02-23 21:09) [7]

Chr(StrToInt("$" + Hex)); =)


 
Vitalik__   (2006-02-24 19:20) [8]

Спасибо всем. И из этого большого примера много полезного взял.
Еще один вопрос. Как теперь мне строку типа String, состоящую
из букв от A до Z перевести в строку типа String, состоящую из цифр в 16-м виде, соответствующим этим буквам?


 
begin...end ©   (2006-02-24 19:55) [9]

> Vitalik__   (24.02.06 19:20) [8]

var
 Str, Hex: string;
begin
 SetLength(Hex, Length(Str) * 2);
 BinToHex(PChar(Str), PChar(Hex), Length(Str))
end


 
Vitalik__   (2006-02-24 20:20) [10]

>begin..end
Класс.
может есть такой же красивый способ обратной задачи (Hex to Str)?
у меня громоздкий и некрасивый код получился - с разложением
на символы и обработкой каждого символа:)


 
begin...end ©   (2006-02-24 20:31) [11]

> Vitalik__   (24.02.06 20:20) [10]

var
 Hex, Str: string;
begin
 SetLength(Str, Length(Hex) div 2);
 HexToBin(PChar(Hex), PChar(Str), Length(Str))
end


 
Vitalik__   (2006-02-24 21:01) [12]

:)
супер.
спасибо.



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

Форум: "Начинающим";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.014 c
2-1140533748
mozgan
2006-02-21 17:55
2006.03.12
Отображать ход копирования в progressbar


2-1140968690
X9
2006-02-26 18:44
2006.03.12
EInvalidGridOperation при присваивании Col и Row


15-1140335748
Ega23
2006-02-19 10:55
2006.03.12
С Днём рождения! 19 февраля


15-1139922163
Styx_
2006-02-14 16:02
2006.03.12
Вот кому Борланд продал Delphi :)


2-1140463821
Keyser
2006-02-20 22:30
2006.03.12
Как завершить процесс и запустить его?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский