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

Вниз

Перевод из двоичной в 16-ю   Найти похожие ветки 

 
maxXP ©   (2007-03-14 17:28) [0]

Подскажите есть ли встроенная функция перевода из двоичной в шесн-ю?


 
eXPell ©   (2007-03-14 17:32) [1]

помоему руками надо делать))


 
Ega23 ©   (2007-03-14 17:34) [2]


> maxXP ©   (14.03.07 17:28)


Парень, они ВСЕ в двоичной.


 
Anatoly Podgoretsky ©   (2007-03-14 19:14) [3]

> maxXP  (14.03.2007 17:28:00)  [0]

Что такое двоичное?


 
maxXP ©   (2007-03-15 14:48) [4]

для перевода чисел из двоичной системы в шестнадцатеричную


 
DrPass ©   (2007-03-15 15:19) [5]


> maxXP ©   (15.03.07 14:48) [4]

Если числа у тебя хранятся в виде текста, то BinToHex. Если в виде соббсно чисел, то вопрос в орешник :)


 
maxXP ©   (2007-03-23 14:48) [6]

Пожалуйста объясните

Проблема такая я генерирую строку, а затем мне надо преобразовать её в HEX и вставить в процедуру



var res: string;

...
res:="1010110"; // 56  в Hex

{так должно быть}   Lpt.WritePort(GetCurrentPort,LPT_EPP_ADDRESS,$56); //1010110

{надо преобр строку в HEX, непонятно, что  за параметр Buffer  в процедуре}   Lpt.WritePort(GetCurrentPort,LPT_EPP_ADDRESS,BinToHex(???, Pchar(res), Length(res)) );

//Delphi syntax: procedure BinToHex(Buffer, Text: PChar; BufSize: Integer);


Подскажите как правильно сделать преобразование.

Извините если вопрос составлен не грамотно =(


 
Сергей М. ©   (2007-03-23 15:02) [7]


> maxXP ©   (23.03.07 14:48) [6]


Сам-то как думаешь ?


 
umbra ©   (2007-03-23 15:56) [8]


> Buffer

это строка, в которую вернется результат преобразования.


 
maxXP ©   (2007-03-23 16:21) [9]

Форумы с названием Основная («Начинающим») создан для таких вопросов. Думаю я внятно объяснил суть проблемы. Буду благодарен за ответ или подсказку.


 
Сергей М. ©   (2007-03-23 16:22) [10]


> maxXP ©   (23.03.07 16:21) [9]


Ну если именно ТАК ты подошел, то НЕТ


 
maxXP ©   (2007-03-23 16:29) [11]


> umbra

Спасибо  за объяснение.

Не могли бы вы показать пример корректного преобразования строки с двоичным  значением    "1010110" в 16 , не получается никак =(


 
Хаванагил   (2007-03-23 16:30) [12]


> maxXP ©   (23.03.07 14:48) [6]

имхо тебе нужно сразу делать BinToInt и результат передавать в ЛПТ
типо того:

Lpt.WritePort(GetCurrentPort,LPT_EPP_ADDRESS, BinToInt(res));


 
Хаванагил   (2007-03-23 16:31) [13]

потомушто BinToHex возвращает строчку. а тебе нужно число.


 
Сергей М. ©   (2007-03-23 16:34) [14]


> Хаванагил


Кгхмм ...
Мда..


 
Хаванагил   (2007-03-23 16:37) [15]


> Сергей М. ©   (23.03.07 16:34) [14]

что не так?


 
maxXP ©   (2007-03-23 16:38) [16]


> Хаванагил  


BinToInt - такой функции нет


 
Хаванагил   (2007-03-23 16:40) [17]


> maxXP ©   (23.03.07 16:38) [16]

ну напиши :)


 
Сергей М. ©   (2007-03-23 16:43) [18]


> maxXP ©   (23.03.07 16:38) [16]
> BinToInt - такой функции нет


Угу, нет.
И BinToХрен() - такой функции тоже нет.
ЧТО тебе мешает ее реализовать самому ?)


 
Плохиш ©   (2007-03-23 16:46) [19]

Афигеть, человек с высшим образованием (по анкете) не умеет скадывать степени двойки, не говоря уж о преобразовании чисел в разные системы счисления. И ещё смеет прикрываться термином "начинающий" :-(

maxXP, тебе до начинающего как ползком до южного полюса...


 
Сергей М. ©   (2007-03-23 16:51) [20]


> Плохиш ©   (23.03.07 16:46) [19]
>
> Афигеть, человек с высшим образованием


Мож оно арбузолитейное ?)


 
Плохиш ©   (2007-03-23 16:53) [21]


> Мож оно арбузолитейное

Вот и пусть льёт свои арбузы, хотя, думается, что от-туда его уже выперли и он решил, что программером самое то :@


 
maxXP ©   (2007-03-23 16:54) [22]

Ой   рассмешили!

*Может я экономист.
*Во вторых я умею делать преобразования ,но может есть чтонить готовое.
*Я не программист по образованию поэтому и прошу помощи, просто надо подправить кое что
* Ребята вы чегоКонференция для начинающих, а также для тех, кому сложно объяснить чего он хочет. Просьба к участникам быть взаимовежливыми, профессионалам отдельная просьба - быть снисходительными.  Пожалуйста ударение на снисходительными.

Ну напишу сам функцию БЕЗ проблем, но когда я отвечаю на вопросы в своей области знаний я не издеваюсь  =)

Добрее надо быть.


 
Плохиш ©   (2007-03-23 16:58) [23]


> maxXP ©   (23.03.07 16:54) [22]
> Ой   рассмешили!
>
> *Может я экономист.

Не верю.

> но когда я отвечаю на вопросы в своей области знаний я не
> издеваюсь  

Ответь на вопрос, сколько я должен потратить денег через полчаса, чтобы через час у меня было денег в 5 раз больше?


 
Сергей М. ©   (2007-03-23 17:01) [24]


> maxXP ©   (23.03.07 16:54) [22]
>
> Ой   рассмешили!
>
> *Может я экономист.


Ну и нахрена экономисту нужны преобразования между различными системами представления чисел ?)
Чем традиционная обезъянья десятичная не угодила ?

Поясни ...


 
maxXP ©   (2007-03-23 17:05) [25]

НЕ ФЛУДИТЕ. ЭТОТ ФОРУМ ДЛЯ ЛЮБЫХ ВОПРОСОВ! Нет желания не отвечайте.  

> Плохиш ©
Закопай на поле чудес и вырастит деревце =))))))))


 
Плохиш ©   (2007-03-23 17:07) [26]


> maxXP ©   (23.03.07 17:05) [25]

Понятно, значит и фраза "когда я отвечаю на вопросы в своей области знаний я не издеваюсь" такое же враньё, что и про экономиста...


 
maxXP ©   (2007-03-23 17:07) [27]


> Сергей М

Специально  для сергея потому-что в исходной функции засылки в лпт используется 16-ная.

Странно а я думал что вы телепаты.


 
Alexdeil   (2007-03-23 17:12) [28]

Умников слишком много, дерзайте (а как из int в Hex, я думаю Вы знаете) :

// Binary to Integer

function BinToInt(Value: string): Integer;
var
  i, iValueSize: Integer;
begin
  Result := 0;
  iValueSize := Length(Value);
  for i := iValueSize downto 1 do
    if Value[i] = "1" then Result := Result + (1 shl (iValueSize - i));
end;

function HexToBin(Hexadecimal: string): string;
const
  BCD: array [0..15] of string =
    ("0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
    "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111");
var
  i: integer;
begin
  for i := Length(Hexadecimal) downto 1 do
    Result := BCD[StrToInt("$" + Hexadecimal[i])] + Result;
end;

// Integer to Binary

function IntToBin1(Value: Longint; Digits: Integer): string;
var
  i: Integer;
begin
  Result := "";
  for i := Digits downto 0 do
    if Value and (1 shl i) <> 0 then
      Result := Result + "1"
  else
    Result := Result + "0";
end;

function IntToBin2(d: Longint): string;
var
  x, p: Integer;
  bin: string;
begin
  bin := "";
  for x := 1 to 8 * SizeOf(d) do
  begin
    if Odd(d) then bin := "1" + bin
    else
      bin := "0" + bin;
    d := d shr 1;
  end;
  Delete(bin, 1, 8 * ((Pos("1", bin) - 1) div 8));
  Result := bin;
end;


 
Сергей М. ©   (2007-03-23 17:13) [29]


> maxXP ©   (23.03.07 17:07) [27]


> в исходной функции засылки в лпт используется 16-ная


Да нам, понимаешь ли,  "фиолетово", что там "использует" твоя фунцкия какой-то там "засылки" в какой-то там "лпт")

У тебя отсутствуют базовые знания - какой тут, нахрен, "лпт" может быть ?)...


 
Хаванагил   (2007-03-23 17:18) [30]

по моему так красивее =)

function BinToInt(bin: string): integer;
var
 i, p: integer;
begin
 p := 1;
 for i := Length(bin) downto 1 do
 begin
   if bin[i] = "1" then Inc(Result, p);
   p := p shl 1;
 end;
end;


 
maxXP ©   (2007-03-23 17:28) [31]


> Alexdeil  
,

> Хаванагил  

Большое спасибо. Все как надо.


> Сергей М
,
> Плохиш
- Удачи вам и ОБЯЗАТЕЛЬНО познакомтесь с ФАНАТОМ и пхпклуба!


 
Johnmen ©   (2007-03-23 19:39) [32]


> - Удачи вам и ОБЯЗАТЕЛЬНО познакомтесь с ФАНАТОМ и пхпклуба!

Ты и там зажигаешь?


 
maxXP ©   (2007-03-26 12:42) [33]

И завершаем  наш занимательный диспут
данным юнитом. Надеюсь кому-нибудь понадобится/
Взято отсюда http://articles.org.ru/cfaq/index.php?qid=2133&catid=34

\\Перевод между системами счисления

   unit convunit;

   interface

   function dec2bin(dec: longint): string;
   function bin2dec(bin: string): longint;
   function dec2hex(dec: longint): string;
   function hex2dec(hex: string): longint;
   function dec2oct(dec: longint): string;
   function oct2dec(oct: string): longint;
   function bin2hex(bin: string): string;
   function hex2bin(hex: string): string;
   function dec2basen(base: integer; dec: longint): string;
   { this function converts numbers from decimal (base 10 notation) to
   different systems of notation. valid systems are from base 2 notation
   to base 36 notation }
   function basen2dec(base: integer; num: string): longint;
   { this function converts numbers from different systems of notation
   to decimal (base 10 notation). valid systems are from base 2 notation
   to base 36 notation }

  ....


   
function bin2hex(bin: string): string;

function sethex(st: string; var error: boolean): char;

var
ch: char;

begin
if st = "0000" then
ch := "0"
else if st = "0001" then
ch := "1"
else if st = "0010" then
ch := "2"
else if st = "0011" then
ch := "3"
else if st = "0100" then
ch := "4"
else if st = "0101" then
ch := "5"
else if st = "0110" then
ch := "6"
else if st = "0111" then
ch := "7"
else if st = "1000" then
ch := "8"
else if st = "1001" then
ch := "9"
else if st = "1010" then
ch := "a"
else if st = "1011" then
ch := "b"
else if st = "1100" then
ch := "c"
else if st = "1101" then
ch := "d"
else if st = "1110" then
ch := "e"
else if st = "1111" then
ch := "f"
else
error := true;
sethex := ch;
end;

var
hex: string;
i: integer;
temp: string[4];
error: boolean;

begin
error := false;
if bin = "0" then
hex := "0"
else
begin
temp := "";
hex := "";
if length(bin) mod 4 < > 0 then
repeat
bin := "0" + bin;
until length(bin) mod 4 = 0;
for i := 1 to length(bin) do
begin
temp := temp + bin[i];
if length(temp) = 4 then
begin
hex := hex + sethex(temp, error);
temp := "";
end;
end;
end;
if error then
bin2hex := "0"
else
bin2hex := hex;
end;

function hex2bin(hex: string): string;

var
bin: string;
i: integer;
error: boolean;

begin
error := false;
bin := "";
for i := 1 to length(hex) do
case upcase(hex[i]) of
"0": bin := bin + "0000";
"1": bin := bin + "0001";
"2": bin := bin + "0010";
"3": bin := bin + "0011";
"4": bin := bin + "0100";
"5": bin := bin + "0101";
"6": bin := bin + "0110";
"7": bin := bin + "0111";
"8": bin := bin + "1000";
"9": bin := bin + "1001";
"a": bin := bin + "1010";
"a": bin := bin + "1011";
"c": bin := bin + "1100";
"d": bin := bin + "1101";
"e": bin := bin + "1110";
"f": bin := bin + "1111";
else
error := true;
end;
if error then
hex2bin := "0"
else
hex2bin := bin;
end;

...



 
maxXP ©   (2007-03-26 12:45) [34]

И завершаем  наш занимательный диспут
данным юнитом. Надеюсь кому-нибудь понадобится/
Взято отсюда http://articles.org.ru/cfaq/index.php?qid=2133&catid=34

\\Перевод между системами счисления

   unit convunit;

   interface

   function dec2bin(dec: longint): string;
   function bin2dec(bin: string): longint;
   function dec2hex(dec: longint): string;
   function hex2dec(hex: string): longint;
   function dec2oct(dec: longint): string;
   function oct2dec(oct: string): longint;
   function bin2hex(bin: string): string;
   function hex2bin(hex: string): string;
   function dec2basen(base: integer; dec: longint): string;
   { this function converts numbers from decimal (base 10 notation) to
   different systems of notation. valid systems are from base 2 notation
   to base 36 notation }
   function basen2dec(base: integer; num: string): longint;
   { this function converts numbers from different systems of notation
   to decimal (base 10 notation). valid systems are from base 2 notation
   to base 36 notation }

  ....


   
function bin2hex(bin: string): string;

function sethex(st: string; var error: boolean): char;

var
ch: char;

begin
if st = "0000" then
ch := "0"
else if st = "0001" then
ch := "1"
else if st = "0010" then
ch := "2"
else if st = "0011" then
ch := "3"
else if st = "0100" then
ch := "4"
else if st = "0101" then
ch := "5"
else if st = "0110" then
ch := "6"
else if st = "0111" then
ch := "7"
else if st = "1000" then
ch := "8"
else if st = "1001" then
ch := "9"
else if st = "1010" then
ch := "a"
else if st = "1011" then
ch := "b"
else if st = "1100" then
ch := "c"
else if st = "1101" then
ch := "d"
else if st = "1110" then
ch := "e"
else if st = "1111" then
ch := "f"
else
error := true;
sethex := ch;
end;

var
hex: string;
i: integer;
temp: string[4];
error: boolean;

begin
error := false;
if bin = "0" then
hex := "0"
else
begin
temp := "";
hex := "";
if length(bin) mod 4 < > 0 then
repeat
bin := "0" + bin;
until length(bin) mod 4 = 0;
for i := 1 to length(bin) do
begin
temp := temp + bin[i];
if length(temp) = 4 then
begin
hex := hex + sethex(temp, error);
temp := "";
end;
end;
end;
if error then
bin2hex := "0"
else
bin2hex := hex;
end;

function hex2bin(hex: string): string;

var
bin: string;
i: integer;
error: boolean;

begin
error := false;
bin := "";
for i := 1 to length(hex) do
case upcase(hex[i]) of
"0": bin := bin + "0000";
"1": bin := bin + "0001";
"2": bin := bin + "0010";
"3": bin := bin + "0011";
"4": bin := bin + "0100";
"5": bin := bin + "0101";
"6": bin := bin + "0110";
"7": bin := bin + "0111";
"8": bin := bin + "1000";
"9": bin := bin + "1001";
"a": bin := bin + "1010";
"a": bin := bin + "1011";
"c": bin := bin + "1100";
"d": bin := bin + "1101";
"e": bin := bin + "1110";
"f": bin := bin + "1111";
else
error := true;
end;
if error then
hex2bin := "0"
else
hex2bin := bin;
end;

...




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

Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.04 c
3-1169214222
barakuda
2007-01-19 16:43
2007.04.15
програмная настройка БДЕ


3-1168938121
SLP
2007-01-16 12:02
2007.04.15
долго работает хранимая процедура


3-1168453623
Juice
2007-01-10 21:27
2007.04.15
Ошибочный результат ХП


3-1170061670
Эстет
2007-01-29 12:07
2007.04.15
Вопрос по компоненту TIBDataSet


2-1174909065
bagos
2007-03-26 15:37
2007.04.15
stringgrid





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский