Solved

Base Conversion Program

Posted on 2000-03-16
3
231 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

Recently I was talking with Tim Sharp, one of my colleagues from our Technical Account Manager team about MongoDB’s scalability. While doing some quick training with some of the Percona team, Tim brought something to my attention...
In this series, we will discuss common questions received as a database Solutions Engineer at Percona. In this role, we speak with a wide array of MySQL and MongoDB users responsible for both extremely large and complex environments to smaller singl…

751 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