Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11639
Последний выпуск: 19.06.2015

Dec2Hex (без огpаничения на вводимое число)?

(Akzhan Abdulin 2:5040/55)
function dec2hex(value: dword): string[8];
const
  hexdigit = '0123456789ABCDEF';
begin
  while value <> 0 do
  begin
    dec2hex := hexdigit[succ(value and $F)];
    value := value shr 4;
  end;
  if dec2hex = '' then dec2hex := '0';
end;

[ Назад ] [ Оглавление ] [ Далее ]

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
Аноним
Мне нравитсяМне не нравится
20 сентября 2005, 08:55:23
%Если кому поможет... написано на Matlab

function s=real2bin(d,z);
%
%REAL2BIN Преобразует действительное число в двоичную строку.
% REAL2BIN(D) возвращает двоичное представление D как сторку.
% D должен быть положительным double меньшим чем 2^52.
%
% REAL2BIN(D,Z) Создаёт двоичное представление действительного числа с
% дробной частью в Z разрядов
%
% Например
% REAL2BIN(28.739) возвращает '11100,1011110100101111'
%
% Смотри также DEC2BIN, BIN2DEC, DEC2HEX, DEC2BASE.
%
% Copyright 1984-2004 Зинаков Иван.
% REAL2BIN v1.0.1. Date: 30.03.04 0:57:23

% Base: Hans Olsson, hanso@dna.lth.se 3-23-95
% Copyright 1984-2002 The MathWorks, Inc.
% $Revision: 1.13 $ $Date: 2002/04/09 00:33:33 $

%
% Входной контроль
%
if nargin==0, error('Не хватает входных аргументов.'); end
if isempty(d), s = ''; return, end

d = d(:); % d - вектор

if (nargin<2) | z>52
z=15; % Установка количества разрядов.
else
if prod(size(z))~=1 | z<0, error('Z должен быть положительным скаляром'); end
z = round(z); % Установить Z положительным.
end;

n=1;

% begin dec2bin
[f,e]=log2(max(d)); % Определение количества разрядов
s=setstr(rem(floor(d*pow2(1-max(n,e):0)),2)+'0');
% end dec2bin

format long g
b=2;

s=[s '.'];
% M=[];
m=d-floor(d);
for ii=0:z
m=m*b;
% M=[M m];
s=[s int2str(floor(m))];
if m>=1, m=m-1; end
end;
2.
Аноним
Мне нравитсяМне не нравится
31 июля 2005, 01:46:12
Извините, но это не dec2hex, это bin2hex!
Данные в переменной value -- двоичные (dword -- 32 bit integer).
Далее, используется операция ПОБИТОВОГО сдвига (которая работает над двоичными битами).
Так что тот факт, что программист может написать
string := dec2hex(123456);
еще не о чем не говорит. Компилятор в любом случае преобразовывает данные в двоичную систему счисления. Если б можно было так:
string := dec2hex('123456');
и функция производила разбор строки, деление с остатком и т. д. (полное "честное" преобразование), то это и было бы преобразование из десятичной в шестнадцатеричную.
3.
Аноним
Мне нравитсяМне не нравится
3 июля 2005, 16:11:08
Извините, две ошибки.
Строка 2: результат функции, конечно же будет '1', что с методической точки зрения не важно.
Строка 11: символ $ заменить на @.
4.
Аноним
Мне нравитсяМне не нравится
3 июля 2005, 16:01:15
Рекомендую выполнять тестовые прогоны.
Имеем: dec2hex ($1234) => '4'
Причина - строка №7 - результату приваивается значение равное одному символу! Кроме того, прямое присвоение значения переменной @Result в цикле (что и делается в этой строке) не рекомендуется.
Есть несколько вполне очевидных способов исправления.
Два первых попавшихся:
1. после первого begin
@Result = '';
в строке присвоения @Result = @Result + hexdigit...
2. после первого begin
$Result[0] = 0; { что, вобщем-то, то же самое}
в присвоении
@Result[byte(Succ(@Result[0]))] := ...
Inc (@Result[0]);
и так можно до бесконечности.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог