Форум: "Основная";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
ВнизHEX to BIN и вывести в string? Найти похожие ветки
← →
dlK (2002-09-05 16:18) [0]Как? :-)
← →
Song (2002-09-05 16:21) [1]Через десятичную систему исчисления вручную.
← →
dlK (2002-09-05 16:22) [2]Это и так понятно. :-))))
Интересует более быстрый способ. Может есть какая функция у кого-нибудь?
← →
Song (2002-09-05 16:24) [3]Есть :-)
Так и называется - HexToBin()
← →
dlK (2002-09-05 16:36) [4]Кинь примерчик, а то конструкция типа:
GetMem(Bin,1024);
HexToBin(PChar("FF"), Bin, sizeof(Bin));
Memo1.Lines.Add(Bin);
FreeMem(Bin);
не пашет. :-((
← →
dlK (2002-09-06 10:16) [5]Не уж-то никто не занимался?
← →
Anatoly Podgoretsky (2002-09-06 10:28) [6]Откуда эта функция? Может надо bin^ или @bin[0]
А что у тебя такие громадные числа?
← →
dlK (2002-09-06 10:46) [7]Название функции мне привел товарищ Song.
Зачем bin^, если bin: PChar?
Кстати, может есть другие способы перевести из 16-го в двоичный формат?
Блин, проще тогда уж самому написать ф-ию, если никто не может подсказать. :-((
← →
Виктор Щербаков (2002-09-06 10:51) [8]
> Блин, проще тогда уж самому написать ф-ию, если никто не
> может подсказать. :-((
Блин, второй день в форум постишь по этому поводу. Самому написать - 5 минут :)
← →
Anatoly Podgoretsky (2002-09-06 10:58) [9]dlK © (06.09.02 10:46)
Это почему я должен догадать как у тебя объявлен твой массив, это ты должен привести необходимую информацию, если тебе нужна помощь, а если просто потрепаться то лучше в соотвествующую конференецию.
Опять по твоим вопросам, ты не ответил на наводящий вопрос - какие у тебя числа (размерность)
← →
Alx2 (2002-09-06 10:59) [10]Совсем на скорость заточенная:
(можно раза в два короче, но во столько же медленнее :))
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 11:09) [11]Alx2 © (06.09.02 10:59)
Нет смысла экономить, правильнее
SmallStr = array[byte] of string;
и 256 констант, кардинальное упрощение алгоритма и увеличение скорости.
← →
Alx2 (2002-09-06 11:14) [12]>Anatoly Podgoretsky © (06.09.02 11:09)
За счет увеличения таблицы констант - да.
За счет увеличения использования операндов типа Strinh - нет.
← →
dlK (2002-09-06 11:24) [13]Хех. Написал за 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)?
← →
dlK (2002-09-06 11:28) [14]В принципе AVal можно и самому посчитать... :-)
Но времени нет. :-(
← →
Alx2 (2002-09-06 11:33) [15]Шестнадцетиричную строковую запись числа перевести?
Поможет
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 15:58) [16]Всё гуд. =) Спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c