Форум: "Начинающим";
Текущий архив: 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