Print character array as hex in C

18,231

Solution 1

You are confused about the fuctionality of strtol. If you have a string that represents a number in hex, you can use strtol like you have:

char s[] = "ff2d";
int n = strtol(s, NULL, 16);
printf("Number: %d\n", n);

When you trying to print the characters of a string in hex, use %x format specifier for each character of the string.

char s[] = "Hello";
char* cp = s;
for ( ; *cp != '\0'; ++cp )
{
   printf("%02x", *cp);
}

Solution 2

Use %x flag to print hexadecimal integer

example.c

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

int main(void) 
{
  char *string = "hello", *cursor;
  cursor = string;
  printf("string: %s\nhex: ", string);
  while(*cursor)
  {
    printf("%02x", *cursor);
    ++cursor;
  }
  printf("\n");
  return 0;
}

output

$ ./example 
string: hello
hex: 68656c6c6f

reference

Share:
18,231

Related videos on Youtube

neby
Author by

neby

Updated on September 15, 2022

Comments

  • neby
    neby over 1 year

    I have a 2D array called char **str (allocated by malloc). Lets say str[0] has the string "hello". How would I print that hex?

    I tried printf("%d\n", (unsigned char)strtol(str[0], NULL, 16)), but that doesn't print it out in hex.

    Any help would be appreciated, thank you!

  • neby
    neby over 8 years
    Thank you as well! The links really helped and always nice to see different ways to do the same thing. Also, the same question above what does the 02 do in %02x?
  • amdixon
    amdixon over 8 years
    02 is just zeropadding so in the event the hexadecimal integer was less than 2 bytes long eg. 9 then it would print 09.. not really required for the alpha characters as these are all in the two byte hexadecimal range
  • not2qubit
    not2qubit almost 5 years
    Can you explain the cursor thing? Also, this will give you compiler error unless you change *string to string[].