<<< Back to the Linux Tips Index

11th October 2016

Convert IP Address to Hexadecimal

PXE Boot is a great way to install clients over the network. They get their IP address by DHCP, which also sends them extra information - specifically, the IP address of a boot server, and the name of a file to request from the boot server.

Typically, they will be instructed to download pxelinux.0, which will be passed to the CPU, and result in the client requesting a further file, either the BIOS UUID, or if that fails, then the client MAC address, or if that fails, then the client IP address (which it retries with ever-reducing accuracy:, then 192.168.1, then 192.168, then 192). However, it asks for these in hexidecimal format, which is a bit of a pain if you don't happen to be 100% fluent in all hex values between 0-255.

Hex Calculator

The conversion looks like this:

Decimal IP Address192168147
Hexadecimal FilenameC0A8012F

So you need to provide files in the /var/lib/tftpboot/pxelinux.cfg/ directory, with names like C0A8012F.

http://www.syslinux.org/wiki/index.php?title=PXELINUX explains the full process.

It's possible to sit down with a Hex Calculator (there are many online, mobile apps, etc), and work out each one. However, this little function will do it for you:

ip_to_hex() {
  printf '%02X' ${1//./ }

The "${1//./ }" means to transform the first (and only) argument, known as "$1" (eg, ""), and convert periods to spaces. This has the convenient side-effect of turning "" into "192 168 1 47". This is useful, because printf, when called as "printf '%02X' 192 168 1 47" will take each of the four arguments, and print them as uppercase hexadecimal strings (as instructed by the '%02X' formatting instruction).

You can use this function to convert the data in any way you like:


ip_to_hex() {
  printf '%02X' ${1//./ }

[ "$#" -eq "1" ] && echo "You asked for $1 which is `ip_to_hex $1`"

echo "IP1 is $IP1, from"

echo "I am about to convert into hex:"

echo "$IP_ADDRESS = `ip_to_hex $IP_ADDRESS`"

When you run this script, it will display this output:

$ ./convert_ip_to_hex.sh
IP1 is C0A8012F, from
I am about to convert into hex:
0A61021F = AC1103C1

If you run it with an IP address as an argument, such as "./convert_ip_to_hex.sh", it will display that, too:

$ ./convert_ip_to_hex.sh
You asked for which is AC11E760
IP1 is C0A8012F, from
I am about to convert into hex:
0A61021F = AC1103C1



Invest in your career. Buy my Shell Scripting Tutorial today:


OG Image credit: https://locus-engineering.com/product-portfolio/e2090-64-bit-hexadecimal20-digit-calculator/
Steve Parker - Linux / DevOps Consultant
Share on Twitter Share on Facebook Share on LinkedIn Share on Identi.ca Share on StumbleUpon
Join the Facebook page for more tips and tricks:
Linux UK

Promote your Page too