Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

HEX to BIN и вывести в string? [D5, Win2k]


dlK ©   (2002-09-05 16:18:00) 

Как? :-)


dlK   (2002-09-06 15:58:00) [1]

Всё гуд. =) Спасибо.


Alx2   (2002-09-06 11:33:00) [2]

Шестнадцетиричную строковую запись числа перевести?

Поможет
procedure Val(S; var V; var Code: Integer);
Пример:

Var V,code : Integer;
begin
Val("$FF",V,code);
if code = 0 then // еси нет ошибки при преобразовании
ShowMessage(IntToStr(V)); // то покажем результат.

end;


dlK   (2002-09-06 11:28:00) [3]

В принципе AVal можно и самому посчитать... :-)

Но времени нет. :-(


dlK   (2002-09-06 11:24:00) [4]

Хех. Написал за 5 минут.

function TfrmMain.HexToStrBin(AVal, ABits: integer): string;
begin
Result := "";

while AVal <> 0 do
begin
if AVal mod 2 = 0 then
Result := "0" + Result
else
Result := "1" + Result;
AVal := AVal div 2;
end;

while Length(Result) < ABits do
Result := "0" + Result;
end;

Вопрос:

Допустим у меня есть переменная X1: string, имеющая значение, допустим "FF", как мне в мою фнукцию передать параметр AVal (decimal) (в данном случае необходимо передать 255)?


Alx2   (2002-09-06 11:14:00) [5]

>Anatoly Podgoretsky © (06.09.02 11:09)
За счет увеличения таблицы констант - да.
За счет увеличения использования операндов типа Strinh - нет.


Anatoly Podgoretsky   (2002-09-06 11:09:00) [6]

Alx2 © (06.09.02 10:59)
Нет смысла экономить, правильнее

SmallStr = array[byte] of string;

и 256 констант, кардинальное упрощение алгоритма и увеличение скорости.


Alx2   (2002-09-06 10:59:00) [7]

Совсем на скорость заточенная:
(можно раза в два короче, но во столько же медленнее :))

function IntToBinStr(Value: Integer): string;
type
SmallStr = array[0..3] of char;
const
Str: array[0..15] of SmallStr =
(
"0000", "0001", "0010", "0011",
"0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011",
"1100", "1101", "1110", "1111");
var bts: array[0..3] of byte absolute value;
ResultArr: array[0..32] of char;
begin
SmallStr((@ResultArr[0])^) := Str[(bts[3] and $F0) shr 4];
SmallStr((@ResultArr[4])^) := Str[bts[3] and $F];
SmallStr((@ResultArr[8])^) := Str[(bts[2] and $F0) shr 4];
SmallStr((@ResultArr[12])^) := Str[bts[2] and $F];
SmallStr((@ResultArr[16])^) := Str[(bts[1] and $F0) shr 4];
SmallStr((@ResultArr[20])^) := Str[bts[1] and $F];
SmallStr((@ResultArr[24])^) := Str[(bts[0] and $F0) shr 4];
SmallStr((@ResultArr[28])^) := Str[bts[0] and $F];
ResultArr[32] := #0;
Result := ResultArr;
end;


Пример использования:

ShowMessage(IntToBinStr($FE));


Anatoly Podgoretsky   (2002-09-06 10:58:00) [8]

dlK © (06.09.02 10:46)
Это почему я должен догадать как у тебя объявлен твой массив, это ты должен привести необходимую информацию, если тебе нужна помощь, а если просто потрепаться то лучше в соотвествующую конференецию.

Опять по твоим вопросам, ты не ответил на наводящий вопрос - какие у тебя числа (размерность)


Виктор Щербаков   (2002-09-06 10:51:00) [9]


> Блин, проще тогда уж самому написать ф-ию, если никто не
> может подсказать. :-((

Блин, второй день в форум постишь по этому поводу. Самому написать - 5 минут :)


dlK   (2002-09-06 10:46:00) [10]

Название функции мне привел товарищ Song.
Зачем bin^, если bin: PChar?

Кстати, может есть другие способы перевести из 16-го в двоичный формат?

Блин, проще тогда уж самому написать ф-ию, если никто не может подсказать. :-((


Anatoly Podgoretsky   (2002-09-06 10:28:00) [11]

Откуда эта функция? Может надо bin^ или @bin[0]
А что у тебя такие громадные числа?


dlK   (2002-09-06 10:16:00) [12]

Не уж-то никто не занимался?


dlK   (2002-09-05 16:36:00) [13]

Кинь примерчик, а то конструкция типа:

GetMem(Bin,1024);
HexToBin(PChar("FF"), Bin, sizeof(Bin));
Memo1.Lines.Add(Bin);
FreeMem(Bin);

не пашет. :-((


Song   (2002-09-05 16:24:00) [14]

Есть :-)
Так и называется - HexToBin()


dlK   (2002-09-05 16:22:00) [15]

Это и так понятно. :-))))

Интересует более быстрый способ. Может есть какая функция у кого-нибудь?


Song   (2002-09-05 16:21:00) [16]

Через десятичную систему исчисления вручную.


Наверх

Титульная страница Поиск, карта сайта Написать письмо