Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Вниз

Что-то у меня не работает 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.064 c
1-1088327660
Гость_Александр
2004-06-27 13:14
2004.07.11
Форма "моргает". Как сделать перерисовку быстрой?


4-1085669490
Raul
2004-05-27 18:51
2004.07.11
кто нибудь подскажите варианты многострочного PopupMenu


4-1086090665
ПЛОВ
2004-06-01 15:51
2004.07.11
Проблема с консолью в XP


6-1084085778
Dublicator
2004-05-09 10:56
2004.07.11
Передача изображения по локальной сети


14-1088063193
Романов Р.В.
2004-06-24 11:46
2004.07.11
Что такое





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский