my $unicode_character_hexadecimal_string = '0x20ac'; #### my $unicode_hex_codepoint = 0x20ac; #### '0xE2 0x82 0xAC' #### my $unicode_char = chr( $unicode_hex_codepoint ); #### '0x62 0x02 0x2C' #### use strict; my $uni_hex = 0x20ac; my $uni_chr = chr($uni_hex); my ( $u8_byts, $strpd_byts ); $u8_byts .= sprintf( "%02x ", $_) for ( unpack( "C*", $uni_chr )); $strpd_byts .= sprintf( "%02x ", $_ & 0x7f ) for ( unpack( "C*", $uni_chr )); ( my $u8_bits = unpack( "B*", $uni_chr )) =~ s/(.{8})/$1 /g; ( my $strpd_bits = $u8_bits ) =~ s/\b1/0/g; printf( "%s == %04x == %s == %s ^^ %s == %s\n", $uni_chr, $uni_hex, $u8_byts, $u8_bits, $strpd_byts, $strpd_bits );