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

Вниз

Что-то у меня не работает BinToHex   Найти похожие ветки 

 
DillerXX ©   (2004-06-26 13:49) [0]

Пробовал
s:="";
s1:=PChar(BIN.Text);
BinToHex(s1,s,SizeOf(s1));
где s и s1 - это PAnsiChar;
и
s:="";
s1:=PChar(BIN.Text);
BinToHex(s1,s,256);
Всё равно не работает. Вернее работает, но не так... Она возвращает что то типа 0104564654СљH в первом случае и <не буду флудить> во втором...
Что я сделал не так?


 
Palladin ©   (2004-06-26 13:57) [1]

А в справку заглядывал?


 
KilkennyCat ©   (2004-06-26 13:58) [2]

Text needs to point to a sequence of characters that has at least 2*BufSize bytes because each hexadecimal character represents two bytes.


 
DillerXX ©   (2004-06-26 14:10) [3]

Значит мне надо писать BinToHex(s1,s,SizeOf(s1)*2)?? Так не работает...


 
Palladin ©   (2004-06-26 14:20) [4]

Да выдели же память, наконец!


 
DillerXX ©   (2004-06-26 16:56) [5]

Блин, всё равно ничего не получается :(( Вот пишу:
buf:=PChar(BIN.Text);
l:=length(buf);
text:=AllocMem(L*2);
BinToHex(Buf,Text,l);
SetString(s, Text, StrLen(Text));

И всё равно она выдаёт не то(301330133013). Где что не так??


 
DillerXX ©   (2004-06-26 19:21) [6]

Не работает :( Можете кто-нибудь написать сдесь РАБОТАЮЩИЙ код?


 
YuRock ©   (2004-06-26 19:39) [7]

Ну вот рабочий вариант:

function BinToHexString(pData: Pointer; dwDataBytesCount: Cardinal): String;
var
 pBuf: PChar;
begin
 Result := "";
 if dwDataBytesCount = 0 then Exit;

 pBuf := AllocMem(dwDataBytesCount * 2 + 1);
 try
   BinToHex(pData, pBuf, dwDataBytesCount);
   Result := String(pBuf);
 finally
   FreeMem(pBuf);
 end;
end;

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

var
 Temp: Integer;
begin
 Temp := 5;
 ShowMessage(BinToHexString(@Temp, SizeOf(Temp)));
end;


 
YuRock ©   (2004-06-26 19:42) [8]

Единственное, что: советую добавить сразу после трая строку

pBuf[dwDataBytesCount * 2 + 1] := #0;


 
DillerXX ©   (2004-06-27 12:03) [9]

Это не то! Я не знаю как так получилось, но она переводит в HEX не бинарное значение, а десятичное! Тоесть, по идее, если я хочу перевести в HEX систему 1011 то должно болучиться B. Но эта функция переводит это как F303, т.е. она думает что это десятичное число! Можешь написать, чтобы она воспринимала как двоичное?


 
YuRock ©   (2004-06-27 15:31) [10]

Бинарное, десятичное, восьмиричное, шестнадцатиричное...
Какая разница? Компилятору все-равно, какое ты число туда передаешь.

Все в конечном итоге - бинарное...


 
DillerXX ©   (2004-06-27 16:22) [11]

Ну ему может и всё равно, а вот мне нет!  Часть моей программы заключается в том, что она переводит из бинарной системы в десятиричную. Но как я понял, в делфи нет функции типа BinToDec. Поэтому я решил перевисти в шестнадцатиричную систему, а потом в десятичную. Но функция думает, что ей дают десятичное число! И в результате получается не правельный результат...


 
YuRock ©   (2004-06-27 16:42) [12]

Пойми, что 1011 - это не 11 в десятичной системе, это одна тысяча ониннадцать!

В Delphi можно писать десятиричные константы (просто пишешь цифры) и шестнадцатиричные (перед константой пиши $).

Двоичные так просто нельзя. Если тебе надо перевести бинарное число в десятичное - вот пример ф-ции:

function BinToCardinal(sBin: String): Cardinal;
var
 Len, i, j, Pow: Cardinal;
begin
 Result := 0;
 Len := Length(sBin);
 for i := 1 to Len do
   if not (sBin[i] in ["0", "1"]) then Exit;

 for i := Len downto 1 do begin
   Pow := 1;
   for j := 1 to Len - i do
     Pow := Pow * 2;

   Result := Result + Pow * Cardinal(StrToInt(sBin[i]));
 end;
end;


 
YuRock ©   (2004-06-27 16:44) [13]

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

ShowMessage(IntToStr(BinToCardinal("1100100100")));


 
begin...end ©   (2004-06-27 17:38) [14]


> [12] YuRock ©   (27.06.04 16:42)


> for i := Len downto 1 do begin
>    Pow := 1;
>    for j := 1 to Len - i do
>      Pow := Pow * 2;
>
>    Result := Result + Pow * Cardinal(StrToInt(sBin[i]));
>  end;

for I := Len downto 1 do
   Result := Result + (1 shl (Len - I)) * Cardinal(StrToInt(sBin[I]));


:)


 
YuRock ©   (2004-06-27 18:46) [15]

Та да :)



Страницы: 1 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
14-1087923648
Piter
2004-06-22 21:00
2004.07.11
Ура! Я избавился от глюков...


14-1087583312
Zeqfreed
2004-06-18 22:28
2004.07.11
Помогите выбрать видеокамеру


1-1087928731
georg
2004-06-22 22:25
2004.07.11
StringGrid Фиксирование ячеек


10-1019023031
Michelson
2002-04-25 10:50
2004.07.11
EntityBean и PrimaryKey


14-1087822292
RealRascal
2004-06-21 16:51
2004.07.11
Диалог с произвольными кнопками