IntToHex — Функция Delphi


IntToHex — Функция Delphi

Описание
Функция преобразовывает десятичное целое число Value в шестнадцатеричный вид и возвращает его строковое представление. Параметр Digits определяет, сколько символов (шестнадцатеричных знаков) должна содержать результирующая строка.

Пример
var
S1, S2: string;
X: integer;
begin
X:= 4321;
S1:= IntTostr(X);
S2:= IntToHex(X, 8); < S := '000010E1' >
MessageDlg( ‘Число в десятичном формате: ‘+ S1+#13+ ‘Число в шестнадцатеричном формате: ‘+ S2, mtInformation, [mbOk], 0);
end;

IntToHex — Функция Delphi

В этом уроке мы рассмотрим функции преобразования чисел в строки и строк в числа.
Давайте рассмотрим часто используемые функции StrToInt, IntToStr, FloatToStr, StrToFloat. Во многих случаях эти функции являются очень полезными в том плане, что они позволяют преобразовывать целочисленные и нецелочисленные переменные типов Integer, Byte, Double, Real и т.п. в их строковое представление в переменную типа String и обратно, если это возможно. Рассмотрим непосредственно сами функции по порядку.
[cc lang=»delphi»]var a: integer;
s: string;
begin
a := 12345;
s := IntToStr(a);
// в результате переменная s будет содержать в себе строку ‘12345’
end;[/cc]
Т.е. функция IntToStr позволяет преобразовывать целочисленную переменную типа integer или byte в ее строковое представление в переменную типа string;

Обратную возможность реализовывает функция StrToInt.
[cc lang=»delphi»]var a: integer;
s: string;
begin
s := ‘12345’; // В s должно быть введено обязательно целочисленное число без лишних символов!
// иначе программа, во время выполнения «конвертации» завершит свою работу
// с ошибкой.
a := StrToInt(s);
// в результате переменная a будет содержать в себе число 12345.
end;[/cc]

Те же возможности нам помогают реализовать функции FloatToStr и StrToFloat, однако они уже позволяют работать с нецелочисленными переменными типа Double, Real и т.п. Работа с ними абсолютно аналогична работе с функциями IntToStr и StrToInt.
[note]Стоит отметить одну важную особенность при переводе строки в нецелочисленное число. В качестве плавающей запятой в «строках-числах» нужно использовать символ «точка», а не символ «запятая». При переводе нецелочисленного числа в строку эта особенность учитывается функцией FloatToStr автоматически.[/note]

IntToHex — Функция Delphi

Нужно такое проделать, но Дельфи ругается. Может подскажите?

а в чем проблема?

Hex, это тоже число, но шестнадцатиричное.

Ф-ция IntToHex возвращает представление числа ввиде «шестнадцатиричной» строки и только.
Для обратного преобразования нужно перед этой строкой ставить знак $ и использовать ф-цию StrToInt, тоесть:

MyInt:=StrToInt(Format(«$%s»,[MyStr]));

P.S. Кстати этот вопрос недели полторы назад на форуме уже был.

Просто число 00FFCC нужно перевести в Integer. Т.е. HexToInt(. )

I := StrToInt(«$00ffcc»);
обрати внимание — не # а $
:)

смешно :),
когда я писал ответ я еще не видел >Board (27.06.02 20:40)

OK. Вот скажите, у меня программа раньше брала из файла номера цветов в 16-ричном виде и преобразовывала по способу, подсказанному вами выше. НО теперь проблема. Ясно, что 16-ричный формат такой $00FFCC, но чёрный цвет там $FFFFFFFF. Т.е. на 2 символа больше. Как мне теперь исправить этот код:

var
I, J: Integer;
begin
For I := 1 to image2.height do
For J := 1 to Image2.Width do
Image2.Canvas.Pixels[I,J] := StrtoInt(Copy(Memo2.Text, i*height+j+1, 7))
end;

Просто теперь получается надо брать по строкам начинающимися с $ и до строки заканчивающимся $.

В том случае, если у тебя в каждой строчке 1 цвет, не проще ли использовать:
Image2.Canvas.Pixels[I,J] := StrtoInt(Memo1.Lines[k]);

2pusrg
В том то и дело, что в Memo1 строки не столбиком, а сплошным текстом :-((

>но чёрный цвет там $FFFFFFFF.

Вообще-то это белый цвет.
Кроме того, для передачи цвета RGB достаточно 6ти — значного значения, т.е. $FFFFFF

Программирование Delphi

Все о программировании.

Главное меню

Как преобразовать числа из одной системы в другую

Числовая система определяет набор значений, которые используются для представления чисел. Компьютер использует двоичную систему исчисления. Двоичная и шестнадцатеричная система исчисления (используется для представления значений [номера и адреса памяти] в компьютерных системах) являются важными для программирования. Двоичные числа важны, потому что компьютер работает c двоичными числами — номера состоят из двух цифр 1 и 0. Шестнадцатеричные числа удобны, потому что они позволяют легко обрабатывать двоичные числа.

Илон Маск рекомендует:  Что такое код perl переменные

Delphi предоставляет множество полезных функций для преобразования целых чисел (в десятичной системе) строковые значения (строка это способ представления шестнадцатеричных и двоичных чисел), и наоборот.

Давайте посмотрим, какие функции можно использовать для преобразования чисел из одной системы в другую, каких функций не хватает и как легко реализовать их в Object Pascal. IntToHex, ObjectPascal.HexToInt.

В модуле SysUtils есть функция IntToHex, которая возвращает шестнадцатиричное представление числа.

Хорошо, у нас есть возможность преобразовать целое число в шестнадцатеричное, а где функция HexToInt? Функция HexToInt не существует в Delphi?.

Тем не менее, Delphi позволяет использовать шестнадцатиричные выражения (используя префикс $). Вот простая функция HexToInt:

Функции IntToBin, BinToInt

Если Вы не знакомы с двоичными числами, то можете почитать Введение в двоичную арифметику.

Таким образом, как организовать функции IntToBin и BinToInt в Delphi. Вот один из примеров:

Римские

В большинстве случаев сегодня используется арабская система исчисления. Десять однозначных цифр от до 9, составляют символы нашей системы исчисления. Примером другой системе счисления является система римских цифр, которые могут представлять все числа от 1 до 1000000, используя только семь символов: I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000. Пример: 1999 (арабская) является MCMXCIX (римская).


А вот функция для перевода целых арабских чисел в римские:

Создание цвета для KML в Delphi

На протяжении всего цикла статей про KML в Delphi я не затрагивал вопроса о том, как в Delphi получить строку с цветом, который используется для заливки полигонов или рисования линий в KML. Вместе с этим, далеко не всегда удобно в Delphi передавать цвет в HEX-форме — намного удобнее задавать цвет в удобной для нас форме, например, как TColor или TAlphaColor. Сегодня разберемся с тем, как получить цвет в HEX-форме для KML. Получить цвет для KML намного проще, чем, например, смешать два цвета в RYB. Всё, что нам необходимо — это получить все составляющие цвета в Delphi и немного переставить байты местами.

Как получить составляющие цвета R, G, B из TColor

Первый способ — использовать возможности модулей Winapi.Windows и Vcl.Graphics:

Второй способ чуть по-быстрее — использовать LongRec из System.SysUtils

Третий способ — использовать модуль System.UITypes

Все три способа приведут к одному и тому же результату — получению компонентов цвета RGB вне зависимости от того, что вы передадите в переменной Color — обычный красный цвет (clRed) или что-нибудь из системных цветов, типа clWindowFrame, которые в Delphi, как известно, имеют отрицательные значения — функция ColorToRGB из Vcl.Graphics приведет цвет к обычному RGB.
С получением RGB разобрались. Теперь перейдем к следующей части — получению HEX-значений.

Преобразование TColor в HEX

Здесь тоже всё достаточно просто, тем более, что в Delphi для этого есть замечательная функция IntToHex(). Для того, чтобы представить TColor в виде HEX нам необходимо:

  1. Получить все составляющие цвета RGB — это мы сделали выше
  2. Преобразовать значения R, G и B в HEX
  3. Составить строку из полученных HEX-значений

Например, вот так можно получить из TColor его представление в HEX:

Или с использованием хэлперов Delphi про один из которых я рассказывал:

Использование хэлпера (в нашем случае — это TByteHelper) приведет ровно к тому же результату, что и в первом случае — будет произведен вызов функции IntToHex().

Теперь, всё, что нам остается — это правильно сформировать строку цвета для KML и добавить в эту строку значение Альфа-канала.

Создаем цвет для KML

В KML Reference говорится, что значения цвета и непрозрачности (opacity, альфа) выражаются в шестнадцатеричном формате, как AABBGGRR, где:

  • AA — непрозрачность (Opacity)
  • BB — значение синего компонента (от 0 до 255 или от 00 до FF)
  • GG— значение зеленого компонента (от 0 до 255 или от 00 до FF)
  • RR — значение красного компонента (от 0 до 255 или от 00 до FF)

Непрозрачность также выражается как число в диапазоне от 0 до 255, где 0 — полностью прозрачный цвет, 255 — полностью непрозрачный. Этот формат несколько отличается от формата цвета в HTML.

Собственно, всё, что нам необходимо для получения цвета в виде ABGR — у нас уже есть. Осталось разобраться с непрозрачностью, которую, всё-таки, лучше задавать в процентах, а не в диапазоне от 0 до 255. Поэтому пишем вот такую функцию получения цвета для KML в виде строки ABGR:

Илон Маск рекомендует:  Что такое код swf_setframe

Если хотите, то можете избавиться в этой функции от лишних переменных, так как по сути, они тут не требуются:

В принципе, на этом можно было бы закончить, если бы мы работали, например, в Delphi 7. Однако, в новых версиях Delphi появился ещё один тип представления цветов — TAlphaColor, который используется, в частности, в FMX. В нашем случае работать с этим типом цвета ещё проще, чем с простым TColor.

Преобразование TAlphaColor в ABGR для KML

Используем TAlphaColorRec для получения всех составляющих цвета:

Converting from Int to Hex in Delphi and Java

I have to convert the following Delphi code to Java:

The IntToHex function converts a DecimalValue integer into a hexadecimal format string of at least MinimumWidth characters wide.

I’ve implemented it in Java as:

Do I need in Java to indicate that the resulting string must contain at least the specified number of digits like in Delphi with parameter MinimumWidth? Did I already with my Java function implemented the full functionality from the Delphi IntToHeX-function?

1 Answer 1

If I correctly understand your question, I think your solution should be to use String.format in Java If you want hex numbers in the string you can use

You can specify the lenght prepending it to the x, as

Where of course mynumber is a int or any other kind of valid number. If you want to pad with zeros you should use

You can use capital X to have capital letters in the resulting String

IntToHex — Функция Delphi


В этом уроке мы рассмотрим функции преобразования чисел в строки и строк в числа.
Давайте рассмотрим часто используемые функции StrToInt, IntToStr, FloatToStr, StrToFloat. Во многих случаях эти функции являются очень полезными в том плане, что они позволяют преобразовывать целочисленные и нецелочисленные переменные типов Integer, Byte, Double, Real и т.п. в их строковое представление в переменную типа String и обратно, если это возможно. Рассмотрим непосредственно сами функции по порядку.
[cc lang=»delphi»]var a: integer;
s: string;
begin
a := 12345;
s := IntToStr(a);
// в результате переменная s будет содержать в себе строку ‘12345’
end;[/cc]
Т.е. функция IntToStr позволяет преобразовывать целочисленную переменную типа integer или byte в ее строковое представление в переменную типа string;

Обратную возможность реализовывает функция StrToInt.
[cc lang=»delphi»]var a: integer;
s: string;
begin
s := ‘12345’; // В s должно быть введено обязательно целочисленное число без лишних символов!
// иначе программа, во время выполнения «конвертации» завершит свою работу
// с ошибкой.
a := StrToInt(s);
// в результате переменная a будет содержать в себе число 12345.
end;[/cc]

Те же возможности нам помогают реализовать функции FloatToStr и StrToFloat, однако они уже позволяют работать с нецелочисленными переменными типа Double, Real и т.п. Работа с ними абсолютно аналогична работе с функциями IntToStr и StrToInt.
[note]Стоит отметить одну важную особенность при переводе строки в нецелочисленное число. В качестве плавающей запятой в «строках-числах» нужно использовать символ «точка», а не символ «запятая». При переводе нецелочисленного числа в строку эта особенность учитывается функцией FloatToStr автоматически.[/note]

IntToHex — Функция Delphi

Нужно такое проделать, но Дельфи ругается. Может подскажите?

а в чем проблема?

Hex, это тоже число, но шестнадцатиричное.

Ф-ция IntToHex возвращает представление числа ввиде «шестнадцатиричной» строки и только.
Для обратного преобразования нужно перед этой строкой ставить знак $ и использовать ф-цию StrToInt, тоесть:

MyInt:=StrToInt(Format(«$%s»,[MyStr]));

P.S. Кстати этот вопрос недели полторы назад на форуме уже был.

Просто число 00FFCC нужно перевести в Integer. Т.е. HexToInt(. )

I := StrToInt(«$00ffcc»);
обрати внимание — не # а $
:)

смешно :),
когда я писал ответ я еще не видел >Board (27.06.02 20:40)

OK. Вот скажите, у меня программа раньше брала из файла номера цветов в 16-ричном виде и преобразовывала по способу, подсказанному вами выше. НО теперь проблема. Ясно, что 16-ричный формат такой $00FFCC, но чёрный цвет там $FFFFFFFF. Т.е. на 2 символа больше. Как мне теперь исправить этот код:

var
I, J: Integer;
begin
For I := 1 to image2.height do
For J := 1 to Image2.Width do
Image2.Canvas.Pixels[I,J] := StrtoInt(Copy(Memo2.Text, i*height+j+1, 7))
end;

Просто теперь получается надо брать по строкам начинающимися с $ и до строки заканчивающимся $.

В том случае, если у тебя в каждой строчке 1 цвет, не проще ли использовать:
Image2.Canvas.Pixels[I,J] := StrtoInt(Memo1.Lines[k]);

Илон Маск рекомендует:  Как изменить цвет ссылки и фона под ней

2pusrg
В том то и дело, что в Memo1 строки не столбиком, а сплошным текстом :-((

>но чёрный цвет там $FFFFFFFF.

Вообще-то это белый цвет.
Кроме того, для передачи цвета RGB достаточно 6ти — значного значения, т.е. $FFFFFF

IntToHex значений в массиве 512 байт в относящемся к CreateFile Ручки всегда возвращает один и тот же выход? FreePascal \ Delphi синтаксис.

Короче говоря, моя программа позволяет хеширование вещей. Одна вещь, которую она в настоящее время не хватает, это возможность для хэширования физических дисков в версии Windows, (версия Linux позволяет пользователю выбрать / DEV / SDA и т.д.).

Я создал кнопку, при нажатии, перечислены все подключенные устройства, чтобы дать мне «\. \ PHYSICALDISKX» (благодаря предложениям от SO пользователей в ответ на мои ранние посты). то я могу передать это значение функции API Windows, CreateFile, когда пользователь дважды нажимает на нее, чтобы создать ручку к нему как ListBox двоеборье щелчка. Так что я сделал все это. Код ниже относится.

Тем не менее, я хочу, чтобы проверить, что CreateFile справиться с этим я учрежденному работаю — если заявление говорит о том, что это, но мне нужно, чтобы проверить, что я могу на самом деле читать данные, чтобы передать свои другие функции. Для того, чтобы проверить, что я пытаюсь прочитать в первых 512 байтах любого данного диска и «quickyl» отобразить его в поле мемо. Тем не менее, я не могу за жизнь мне понять, почему мой вывод некорректный, что она есть. Я получаю некоторые шестнадцатеричные значения, но они не такие же шестигранные значений, которые присутствуют в первых 512 байтах. И они всегда тот же список шестнадцатеричных значений, независимо от того, какой диск я смотрю! Так что я понятия не имею, где эти значения поступающих или почему theey всегда одинакова. Вся идея для меня, чтобы проверить мою ручку в порядке и что я на самом деле может считывать данные с диска для меня затем передать мои функции хэширования.

Может кто-нибудь увидеть, где я неправильно, пожалуйста?

Какую версию Windows , вы работаете на? В CreateFile () документации говорится:

Моя версия функции Delphi IntToStr

Данная функция была написана мной довольно давно и стала она результатом того, что мне потребовалось написать на такую программу, которая бы смогла работать так же, как и стандартная IntToStr.

Основным и главным преимуществом написанной мной функции стало то, что она максимально возможно независима от любых внешних модулей, причем даже! Этого мне удалось достичь за счет того, что я не использовал в ней других функций. И поставленная задача была решена исключительно с использованием циклов!

Вот, собственно, и сам код:

function myIntToStr ( value : integer ) : string ;/ / Начало функции

var tempStr , RStr : string ;/ / Сроки , которые будут использоваться
n , n1 , n2 , count1 , count2 , t , p , d : integer ;/ / Переменные , которые будут использоваться

begin / / начало расчетов по функции

if value > = 0 then n : = value else n = ( — value ) ;
/ / Получение модуля введенного числа
n1 = n ;/ / Будет использовано для поиска количества знаков в числе
n2 = n ;/ / Будет использовано в основном цикле
count1 = 0 ;/ / накапливать информацию о количестве знаков в числе
tempStr = » ;/ / Начинаем с пустой сроки

repeat / / С помощью этого цикла будет найдена количество знаков в числе
begin / / Начало тела цикла
n1 = n1 div 10 ;/ / Процедура представляет собой последовательное деление числа на 10
count1 = count1 +1 ;/ / После выхода из цикла равно количеству знаков
end ;/ / Завершение тела цикла
until / / Условие выхода из цикла
n1 = 1 , то d будет другое значение
begin / / Начало процедуры нахождения d
for p : = 1 to n1 do / / Цикл нахождения технической переменной d
begin / / Начало цикла нахождения d
d = d * 10 ;/ / d есть 10 в степени n1
end ;/ / Завершение цикла нахождения d
end ;/ / Завершение процедуры нахождения d

while n2 > = d do / / Цикл уменьшения n2 : выполняется , пока n2 больше d
begin / / Начало цикла уменьшение n2
n2 = n2 — d ;/ / Вычитаем d от n2
count2 = count2 +1 ;/ / Считаем количество таких операций
end ;/ / Завершение цикла уменьшение n2

tempStr = tempStr + format (‘ % d ‘ , [ count2 ] ) ;/ / Сохраняем значение count2
/ / Это значение соответствует цифре , занимающий эту позицию

end ;/ / Завершение цикла обхода знаков
end ;/ / Завершение основного цикла
if value > = 0 then RStr = tempStr else RStr = ‘-‘ + tempStr ;
/ / Строка с результатом сохранит знак начального числа
result : = RStr ;/ / Это срока функция возвращать после всех расчетов
end ;/ / Завершение расчетов по функции

Надеюсь, что Вам пригодится найденное мной решение!

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL