![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кодировки и системы счисления
Vitalik__ © (2006-02-23 18:29:00)Неподскажите как мне перевести 16-ричное число в деcятичное, а затем его превратить в символ по кодировке в win
пример:
7f --> 111 --> b
Vitalik__ (2006-02-24 21:01:00) [1]:)
супер.
спасибо.
begin...end (2006-02-24 20:31:00) [2]> 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 20:20:00) [3]>begin..end
Класс.
может есть такой же красивый способ обратной задачи (Hex to Str)?
у меня громоздкий и некрасивый код получился - с разложением
на символы и обработкой каждого символа:)
begin...end (2006-02-24 19:55:00) [4]> 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 19:20:00) [5]Спасибо всем. И из этого большого примера много полезного взял.
Еще один вопрос. Как теперь мне строку типа String, состоящую
из букв от A до Z перевести в строку типа String, состоящую из цифр в 16-м виде, соответствующим этим буквам?
Zeqfreed (2006-02-23 21:09:00) [6]
Chr(StrToInt('$' + Hex));=)
begin...end (2006-02-23 20:07:00) [7]> API (23.02.06 19:59) [5]
Абалдеть. См. [1].
StrToInt('$' + ...)
API (2006-02-23 19:59:00) [8]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;
То есть, конечно, это одно из возможных решений...
Будут вопросы - задавайте...
Vitalik__ (2006-02-23 18:56:00) [9]что-то неполучается.
а пример можно?
str:='7a';//переменной str присваиваем число - оно в 16-чной системе.
//str - тип string
//как сделать так, чтобы в переменной result был символ, соответствующий
//'7а' в 16-ричной системе
result:= ?
Desdechado (2006-02-23 18:36:00) [10]Format()
PS 16-ричное число в деcятичное - это способы представления числа, а само число все то же самое
Eraser (2006-02-23 18:34:00) [11]IntToStr опционально )) для обещего развития )
Eraser (2006-02-23 18:33:00) [12]
> Vitalik__ (23.02.06 18:29)
StrToInt, IntToStr, Chr + F1