Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.12;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.041 c
15-1140292750
Nick Denry
2006-02-18 22:59
2006.03.12
Что такое "снижение процентной ставки"


2-1140522139
Pit
2006-02-21 14:42
2006.03.12
Popupmenu


15-1139738701
Kerk
2006-02-12 13:05
2006.03.12
Персональный игнорлист 0.75


3-1137399113
Васяня
2006-01-16 11:11
2006.03.12
Определение существания таблицы


8-1128425545
Eugene_T
2005-10-04 15:32
2006.03.12
Конвертирование mp3 -> wav