Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.19;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
1-61059
Андрей воробей
2002-09-09 12:43
2002.09.19
Помогите


14-61251
BigBadMutuh
2002-08-18 21:34
2002.09.19
Что за вирусятина?


3-60964
Kurt
2002-08-28 17:31
2002.09.19
Как мне узнать пустой ли QRBand (что со свойством Detail)?


14-61274
Jee
2002-08-23 11:37
2002.09.19
Библиотека SynEdit


4-61383
Delphi5.01
2002-07-26 00:12
2002.09.19
Kak zaktir Dos prilojenie. Pri WM_QUIT proisxodit zavison!