![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]Через десятичную систему исчисления вручную.