Solved-Assignment Zero: -Base Conversion- Solution

$35.00 $24.00

You are to write a simple C program that will take a decimal number and a base as command line arguments and output the decimal number in that specified base. For example: $ ./conv 13 2 1101 $ ./conv 236709 8 716245 $ ./conv 1352275 11 843A91 $ ./conv 38572856 64 2J9Cu $ ./conv 3232236286…

You’ll get a: . zip file solution

 

 
Categorys:

Description

5/5 – (2 votes)

You are to write a simple C program that will take a decimal number and a base as command line arguments and output the decimal number in that specified base. For example:

$ ./conv 13 2
1101
$ ./conv 236709 8
716245
$ ./conv 1352275 11
843A91
$ ./conv 38572856 64
2J9Cu
$ ./conv 3232236286 256
192.168.2.254

$ ./conv
Usage: conv
$ ./conv 11111 65
INVALID BASE

1. Your program should be able to handle all bases from 2 to 64 and 256.
1. For bases that are powers of 2 (2, 4, 8, 16, 32, 64 and 256) you should use a **mask and shift** algorithm. See below.
1. Please name your code file `conv.c`. This will be the only file you submit to me (via the git server, we will get you connected to this on Thursday, _so come prepared_).
1. Attempt to handle errors. Another problem could be an invalid base (see example output).
1. Use a buffer of **32 characters**. This will give you 31 locations for characters and the final location should be a null.
1. Remember: you have to put the digits into the buffer _backwards_ and when the algorithm is finished, you have to _printf from the correct location in that buffer_. See the example we did in class for how to accomplish that.

### Converting Integers to Characters

Think about how to use this character array:

“`c
char *ascii = “0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/”;
“`

You can declare this at the top of your file along with your buffer. How can you use this to accomplish a conversion to bases 11 to 64? Think about how to do this! It is just an array of characters …

### Masking & Shifting

Along with the algorithm we saw in class of modulo followed by division, you can accomplish the same result on bases that are powers of two _by masking off the number of bits you need and then shifting the bits down_. Remember how the `&` operator works? What if you are trying to convert the number 7 into base 4? How many bit patterns are there for base 4: `00`, `01`, `10` and `11` which is 0, 1, 2 and 3. Let’s see how masking works:

0111 = 7
& 0011 = 3
__________
11 = 3

So, you’ve “masked off” the first digit by using the `&` (bitwise and) operator instead of modulo. Now you can shift those bits to the right instead of using the division operator like so:

0111 >> 2 = 01

And continue with the algorithm:

01 = 1
& 11 = 3
________
01 = 1

So the number 7 in base 4 is: 13!

_You must use this algorithm for the specified bases!_