Ipv4 has a limited amount of addresses available for internet devices to use, 4,294,967,296 to be exact. According to Internet Assigned Numbers Authority (IANA) which manages and issues said IP addresses around the world, we’ve now run out of them. However, this doesn’t mean we’ve run out of IP addresses. In our more modern, full-of-internet-attached-devices world, Ipv6 was born in 1998 far ahead of when we would run out. Due to this, we now have trillions of addresses available for each device to use and continue to be unique to each internet device. Instead of ipv4 which uses one byte of data per octet, each character of ipv6 uses a half byte of data or nibble.
In binary form, an octet of ipv4 such as 172 would be represented as 10101100 which is 8 bits of data to form a byte. An ipv4 octet ranges from 1-255 whereas in ipv6, a chunk (or word) ranges from 0000 to ffff. Lets say an octet from ipv6 is 7aab; this would translate to 0111 1010 1010 1011 (But without the spaces, used to show each character). This would represent 16 bits of data per chunk to form a 128 bit address when completed (16 bits per chunk, 8 chunks total). Below are some graphs to help you calculate the bits of data per character of ipv6.
To use this punnett square, find the character you want to convert to binary. Start with the number immediately right, then add the numbers immediately above. To find the hex digit 9 for instance, the right binary is 10 and the top binary is 01 giving you the full nibble of 1001.