C Program to Convert Hexadecimal to Decimal

Hexadecimal to decimal conversion is a fundamental task in programming, particularly in the C language, where working with various number systems is essential. In this article, we will explore three effective methods to write a C Program to Convert Hexadecimal to Decimal. I will present each method with code examples, explanations, and the expected output, targeting a technical audience eager to enhance their programming skills. We set the base argument to 16 to indicate that the input is in hexadecimal. You can also refer to our complete guide to learn how to convert Decimal to Hexadecimal.

C Program to Convert Hexadecimal to Decimal: A Complete Guide

Understanding Hexadecimal and Decimal Systems

Before diving into the code, it’s essential to grasp the concept of hexadecimal and decimal numbering systems. The hexadecimal system is a base-16 system, consisting of digits from 0 to 9 and letters A to F. In contrast, the decimal system is a base-10 system consisting of digits from 0 to 9.

Before delving into the conversion process, it’s important to understand the two number systems involved:

  • Hexadecimal (Base-16): This system uses the digits 0-9 and the letters A-F to represent values. For example, A equals 10, B equals 11, and F equals 15.
  • Decimal (Base-10): The standard number system used in everyday life, utilizing digits 0-9.

Converting hexadecimal to decimal is crucial for many programming tasks, ranging from memory address representation to data manipulation.

Method 1) C Program to Convert Hexadecimal to Decimal Using the strtol Function

One of the simplest methods for converting hexadecimal to decimal in C is by using the strtol function. This function takes a string and converts it into a long integer based on the specified base.

Code Example

#include <stdio.h>  
#include <stdlib.h>  

int main() {  
    const char *hexString = "2F4B";  // Sample Hexadecimal String  
    long decimalValue;  

    // Convert hexadecimal to decimal  
    decimalValue = strtol(hexString, NULL, 16);  

    // Output the result  
    printf("Hexadecimal: %s\n", hexString);  
    printf("Decimal: %ld\n", decimalValue); // Output: 12011  

    return 0;  
}

Explanation

In this code:

  • We define a hexadecimal string hexString.
  • The strtol function converts the hexString into its decimal equivalent. We set the base argument to 16 to indicate that the input is in hexadecimal.
  • The output confirms the conversion to 12011.

Output

Hexadecimal: 2F4B  
Decimal: 12011

Method 2) C Program to Convert Hexadecimal to Decimal Using a Loop

For a hands-on approach, you can manually convert hexadecimal to decimal using a loop. This method allows for an explicit breakdown of each step in the conversion process.

Code Example

#include <stdio.h>  
#include <string.h>  
#include <math.h>  

int hexToDecimal(const char *hexString) {  
    int decimalValue = 0;  
    int base = 1;  // Start with base 16^0  

    // Get the length of the hexadecimal string  
    int length = strlen(hexString);  
    
    // Iterate through the string from the last character  
    for (int i = length - 1; i >= 0; i--) {  
        // Convert hex character to its decimal equivalent  
        if (hexString[i] >= '0' && hexString[i] <= '9') {  
            decimalValue += (hexString[i] - '0') * base;  
        } else if (hexString[i] >= 'A' && hexString[i] <= 'F') {  
            decimalValue += (hexString[i] - 'A' + 10) * base;  
        }  
        base *= 16; // Increment the base by a power of 16  
    }  
    return decimalValue;  
}  

int main() {  
    const char *hexString = "2F4B";  
    int decimalValue = hexToDecimal(hexString);  

    // Output the result  
    printf("Hexadecimal: %s\n", hexString);  
    printf("Decimal: %d\n", decimalValue); // Output: 12011  

    return 0;  
}

Explanation

In this code:

  • The function hexToDecimal iterates through the hexadecimal string from the end to the beginning.
  • It converts each character to its decimal equivalent based on its position and aggregates the result.
  • When executed, this program verifies the conversion results in 12011.

Output

Hexadecimal: 2F4B  
Decimal: 12011

Method 3) C Program to Convert Hexadecimal to Decimal Using Bitwise Operators

For a more advanced approach, you can utilize bitwise operators for the conversion of hexadecimal to decimal.

Code Example

#include <stdio.h>  

int hexCharToDecimal(char hex) {  
    if (hex >= '0' && hex <= '9') return hex - '0';  
    if (hex >= 'A' && hex <= 'F') return hex - 'A' + 10;  
    return 0;  
}  

int hexToDecimalUsingBitwise(const char *hexString) {  
    int decimalValue = 0;  

    // Iterate through each character in the hex string  
    while (*hexString) {  
        decimalValue = (decimalValue << 4) | hexCharToDecimal(*hexString++);  
    }  
    return decimalValue;  
}  

int main() {  
    const char *hexString = "2F4B";  
    int decimalValue = hexToDecimalUsingBitwise(hexString);  

    // Output the result  
    printf("Hexadecimal: %s\n", hexString);  
    printf("Decimal: %d\n", decimalValue); // Output: 12011  

    return 0;  
}

Explanation

In this approach:

  • The hexCharToDecimal function converts individual hexadecimal characters to decimal values.
  • The hexToDecimalUsingBitwise function calculates the decimal value by employing bitwise left shifts and OR operations.
  • The output confirms correct conversion to 12011.

Output

Hexadecimal: 2F4B  
Decimal: 12011

You can convert hexadecimal to decimal in C using various methods, such as built-in functions, manual loops, or bitwise operations. Each of these approaches provides unique insights into transforming hexadecimal numbers into decimal format, enriching your programming knowledge and skills.

Frequently Asked Questions (FAQs)

1) What is hexadecimal?

Hexadecimal is a base-16 number system that uses digits 0-9 and letters A-F.

2) Why is converting hexadecimal to decimal important?

It allows programmers to manipulate data easily and understand memory addresses.

3) Can I convert lowercase hexadecimal values?

  • Yes, you can modify the code to handle both lowercase and uppercase characters.

4) What is the maximum hexadecimal value that can be converted in C?

The maximum value is limited by the size of the data type used (like long long).

5) Do I need specific libraries for these conversions?

For strtol, the <stdlib.h> library is required; other methods can run without additional libraries.

6) How can invalid hexadecimal inputs be handled?

Implement error-checking to ensure that the program processes only valid hexadecimal strings.

7) Is the manual method efficient?

While not as concise as built-in functions, it provides clear insight into the conversion process.

8) What will the output be for “FFFF”?

The output will be 65535.

9) How do I convert negative hexadecimal values?

To convert negative hex values, additional handling is required.

10) What is the range of decimal values for two-digit hex values?

The range for two-digit hexadecimal values is from 0 to 255 in decimal.

By following this guide and utilizing the provided code snippets, you can efficiently convert hexadecimal to decimal using C, enhancing your programming capabilities and understanding of numerical systems.

Categories C

Leave a Comment