Solved

Base Conversion Program

Posted on 2000-03-16
3
224 Views
Last Modified: 2010-04-16
Hello
I am looking for a program which can convert Base type of given number.
Like convert hex to decimal, octal to hex, hex to octal,bin to hex etc..
A DOS version of program is OK.
Thanks in advance
Sollala
0
Comment
Question by:sollala
  • 2
3 Comments
 
LVL 5

Expert Comment

by:scrapdog
ID: 2626267
The Calculator that ships with Windows is capable of this.  In the View menu, selected Scientific.
0
 

Author Comment

by:sollala
ID: 2626292
I know that calculator can do that, I want a Pascal Program which does this.
0
 
LVL 5

Accepted Solution

by:
scrapdog earned 50 total points
ID: 2626396
well, I just threw this program together, you can extract from it what you need


The function "convert" accepts three arguments:  the source number (in a string), the source base (1-16), and the target base(1-16).

It will between any of these (e.g. binary to octal, octal to hex, base 3 to base 15, etc., etc.) for a total of 256 possible conversions.

For example, to convert "123" decimal to octal, you would use the expression

convert('123',10,8);


*********************************


program base_converter;


const
  digits :string[16] = '0123456789ABCDEF';

function convert_digit(c :char) :integer;
var
  digit :integer;
begin
  digit := ord(upcase(c));
  if digit in [ord('0')..ord('9')] then
    digit := digit - ord('0')
  else if digit in [ord('A')..ord('F')] then
    digit := digit - ord('A') + 10
  else
    digit := -1;
  convert_digit := digit;
end;



function convert(s :string; source, target :integer) :string;
var
  decimal, place :longint;
  i,digit,d :integer;
  s2 :string;
  msd :boolean;
  error :boolean;
begin
  place := 1;
  decimal := 0;
  s2 := '';
  i := length(s);
  error := false;
  while (i > 0) and (not error) do begin
    digit := convert_digit(s[i]);
    if (digit < 0) or (digit >= source) then
      error := true
    else begin
      decimal := decimal + place * digit;
      place := place * source;
      dec(i);
    end;
  end;
  if not error then begin
    msd := false;
    place := 1;
    while place < decimal do place := place * target;
    while place > 0 do begin
      d := decimal div place;
      if (d <> 0) or msd then begin
        s2 := s2 + digits[d+1];
        msd := true;
      end;
      decimal := decimal mod place;
      place := place div target;
    end;
  end else
    s2 := '**ERROR: INVALID CHARACTER***';
  convert := s2;
end;

var
  source,target :integer;
  s :string;
begin
  write('Enter source base(1-16):'); readln(source);
  write('Enter target base(1-16):'); readln(target);
  write('Enter value:'); readln(s);
  writeln(convert(s,source,target));
  readln;
end.





0

Featured Post

Active Directory Webinar

We all know we need to protect and secure our privileges, but where to start? Join Experts Exchange and ManageEngine on Tuesday, April 11, 2017 10:00 AM PDT to learn how to track and secure privileged users in Active Directory.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

The Nano Server Image Builder helps you create a custom Nano Server image and bootable USB media with the aid of a graphical interface. Based on the inputs you provide, it generates images for deployment and creates reusable PowerShell scripts that …
With User Account Control (UAC) enabled in Windows 7, one needs to open an elevated Command Prompt in order to run scripts under administrative privileges. Although the elevated Command Prompt accomplishes the task, the question How to run as script…
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…

830 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question