Starting from:
$30

$24

Assignment Zero: Base Conversion Solution

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 <decimal <base

$ ./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!_

More products