Главная страница
    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.48 MB
Время: 0.014 c
15-1140256220
maximsms
2006-02-18 12:50
2006.03.12
Формат RichText


3-1137275428
muster
2006-01-15 00:50
2006.03.12
Фильтрация с неточным совпадением


2-1140594863
Wel
2006-02-22 10:54
2006.03.12
Как правильно осуществить переход.


2-1141033730
WestBronx
2006-02-27 12:48
2006.03.12
Как правельно указать параметры в OleCreateLinkToFile?


8-1127796882
OlegM
2005-09-27 08:54
2006.03.12
Воспроизвести AVI файл без MediaPlayer, как?





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